From 588e54bde042e33ed0bacbfec4be52347cb19600 Mon Sep 17 00:00:00 2001 From: Bozho Date: Mon, 19 Mar 2018 13:29:27 +0200 Subject: [PATCH 1/5] Fixing issues in deployment, including #666, #667 and #668 --- build.gradle | 2 +- .../netflix/priam/SimpleDBConfigSource.java | 16 ++++++--- .../netflix/priam/aws/SDBInstanceData.java | 34 ++++++++++++++----- .../priam/defaultimpl/PriamConfigSource.java | 4 +-- .../priam/defaultimpl/PriamGuiceModule.java | 3 +- .../netflix/priam/tuner/StandardTuner.java | 6 ++-- priam/src/main/resources/Priam.properties | 17 +++++++--- 7 files changed, 59 insertions(+), 23 deletions(-) diff --git a/build.gradle b/build.gradle index 2b21fcd19..f0c327a03 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'nebula.netflixoss' version '5.0.0' } -ext.githubProjectName = 'Priam' +ext.githubProjectName = 'Priam-parent' allprojects { apply plugin: 'nebula.netflixoss' diff --git a/priam/src/main/java/com/netflix/priam/SimpleDBConfigSource.java b/priam/src/main/java/com/netflix/priam/SimpleDBConfigSource.java index b376acc80..58750fef1 100644 --- a/priam/src/main/java/com/netflix/priam/SimpleDBConfigSource.java +++ b/priam/src/main/java/com/netflix/priam/SimpleDBConfigSource.java @@ -47,15 +47,22 @@ public final class SimpleDBConfigSource extends AbstractConfigSource { private static final Logger logger = LoggerFactory.getLogger(SimpleDBConfigSource.class.getName()); - private static final String DOMAIN = "PriamProperties"; - private static String ALL_QUERY = "select * from " + DOMAIN + " where " + Attributes.APP_ID + "='%s'"; + private static final String DEFAULT_DOMAIN = "PriamProperties"; + private static String ALL_QUERY = "select * from `%s` where " + Attributes.APP_ID + "='%s'"; private final Map data = Maps.newConcurrentMap(); private final ICredential provider; - + private final String domain; + @Inject public SimpleDBConfigSource(final ICredential provider) { this.provider = provider; + String configuredDomain = System.getProperty("priam.sdb.properties.domain"); + if (configuredDomain == null) { + domain = DEFAULT_DOMAIN; + } else { + domain = configuredDomain; + } } @Override @@ -68,8 +75,9 @@ public void intialize(final String asgName, final String region) { String nextToken = null; String appid = asgName.lastIndexOf('-') > 0 ? asgName.substring(0, asgName.indexOf('-')) : asgName; logger.info("appid used to fetch properties is: {}", appid); + logger.info("domain used to fetch properties is: {}", domain); do { - SelectRequest request = new SelectRequest(String.format(ALL_QUERY, appid)); + SelectRequest request = new SelectRequest(String.format(ALL_QUERY, domain, appid)); request.setNextToken(nextToken); SelectResult result = simpleDBClient.select(request); nextToken = result.getNextToken(); diff --git a/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java b/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java index 32881824d..3df72e3e8 100644 --- a/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java +++ b/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java @@ -28,11 +28,16 @@ import java.util.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * DAO for handling Instance identity information such as token, zone, region */ @Singleton public class SDBInstanceData { + private static final Logger logger = LoggerFactory.getLogger(SDBInstanceData.class.getName()); + public static class Attributes { public final static String APP_ID = "appId"; public final static String ID = "id"; @@ -45,17 +50,24 @@ public static class Attributes { public final static String HOSTNAME = "hostname"; } - public static final String DOMAIN = "InstanceIdentity"; - public static final String ALL_QUERY = "select * from " + DOMAIN + " where " + Attributes.APP_ID + "='%s'"; - public static final String INSTANCE_QUERY = "select * from " + DOMAIN + " where " + Attributes.APP_ID + "='%s' and " + Attributes.LOCATION + "='%s' and " + Attributes.ID + "='%d'"; + public static final String DEFAULT_DOMAIN = "InstanceIdentity"; + public static final String ALL_QUERY = "select * from `%s` where " + Attributes.APP_ID + "='%s'"; + public static final String INSTANCE_QUERY = "select * from `%s` where " + Attributes.APP_ID + "='%s' and " + Attributes.LOCATION + "='%s' and " + Attributes.ID + "='%d'"; private final ICredential provider; private final IConfiguration configuration; - + private final String domain; + @Inject public SDBInstanceData(ICredential provider, IConfiguration configuration) { this.provider = provider; this.configuration = configuration; + String configuredDomain = System.getProperty("priam.sdb.instanceidentity.domain"); + if (configuredDomain == null) { + domain = DEFAULT_DOMAIN; + } else { + domain = configuredDomain; + } } /** @@ -67,7 +79,9 @@ public SDBInstanceData(ICredential provider, IConfiguration configuration) { */ public PriamInstance getInstance(String app, String dc, int id) { AmazonSimpleDB simpleDBClient = getSimpleDBClient(); - SelectRequest request = new SelectRequest(String.format(INSTANCE_QUERY, app, dc, id)); + String query = String.format(INSTANCE_QUERY, domain, app, dc, id); + logger.info("Fetching instance data using query {}", query); + SelectRequest request = new SelectRequest(query); SelectResult result = simpleDBClient.select(request); if (result.getItems().size() == 0) return null; @@ -85,7 +99,9 @@ public Set getAllIds(String app) { Set inslist = new HashSet(); String nextToken = null; do { - SelectRequest request = new SelectRequest(String.format(ALL_QUERY, app)); + String query = String.format(ALL_QUERY, domain, app); + logger.info("Fetching IDs using query {}", query); + SelectRequest request = new SelectRequest(query); request.setNextToken(nextToken); SelectResult result = simpleDBClient.select(request); nextToken = result.getNextToken(); @@ -106,7 +122,7 @@ public Set getAllIds(String app) { */ public void createInstance(PriamInstance instance) throws AmazonServiceException { AmazonSimpleDB simpleDBClient = getSimpleDBClient(); - PutAttributesRequest putReq = new PutAttributesRequest(DOMAIN, getKey(instance), createAttributesToRegister(instance)); + PutAttributesRequest putReq = new PutAttributesRequest(domain, getKey(instance), createAttributesToRegister(instance)); simpleDBClient.putAttributes(putReq); } @@ -118,7 +134,7 @@ public void createInstance(PriamInstance instance) throws AmazonServiceException */ public void registerInstance(PriamInstance instance) throws AmazonServiceException { AmazonSimpleDB simpleDBClient = getSimpleDBClient(); - PutAttributesRequest putReq = new PutAttributesRequest(DOMAIN, getKey(instance), createAttributesToRegister(instance)); + PutAttributesRequest putReq = new PutAttributesRequest(domain, getKey(instance), createAttributesToRegister(instance)); UpdateCondition expected = new UpdateCondition(); expected.setName(Attributes.INSTANCE_ID); expected.setExists(false); @@ -134,7 +150,7 @@ public void registerInstance(PriamInstance instance) throws AmazonServiceExcepti */ public void deregisterInstance(PriamInstance instance) throws AmazonServiceException { AmazonSimpleDB simpleDBClient = getSimpleDBClient(); - DeleteAttributesRequest delReq = new DeleteAttributesRequest(DOMAIN, getKey(instance), createAttributesToDeRegister(instance)); + DeleteAttributesRequest delReq = new DeleteAttributesRequest(domain, getKey(instance), createAttributesToDeRegister(instance)); simpleDBClient.deleteAttributes(delReq); } diff --git a/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfigSource.java b/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfigSource.java index 50c67cfda..a83ca680e 100644 --- a/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfigSource.java +++ b/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfigSource.java @@ -34,7 +34,7 @@ public PriamConfigSource(final SimpleDBConfigSource simpleDBConfigSource, // this order was based off PriamConfigurations loading. W/e loaded last could override, but with Composite, first // has the highest priority. super(simpleDBConfigSource, - propertiesConfigSource, - systemPropertiesConfigSource); + systemPropertiesConfigSource, + propertiesConfigSource); } } diff --git a/priam/src/main/java/com/netflix/priam/defaultimpl/PriamGuiceModule.java b/priam/src/main/java/com/netflix/priam/defaultimpl/PriamGuiceModule.java index db2d1cc48..89dbe3390 100644 --- a/priam/src/main/java/com/netflix/priam/defaultimpl/PriamGuiceModule.java +++ b/priam/src/main/java/com/netflix/priam/defaultimpl/PriamGuiceModule.java @@ -26,6 +26,7 @@ import com.netflix.priam.aws.auth.EC2RoleAssumptionCredential; import com.netflix.priam.aws.auth.IS3Credential; import com.netflix.priam.aws.auth.S3RoleAssumptionCredential; +import com.netflix.priam.aws.IAMCredential; import com.netflix.priam.backup.BackupFileSystemContext; import com.netflix.priam.backup.IBackupFileSystem; import com.netflix.priam.backup.IBackupMetrics; @@ -63,7 +64,7 @@ protected void configure() { bind(IFileCryptography.class).annotatedWith(Names.named("filecryptoalgorithm")).to(PgpCryptography.class); bind(ICredentialGeneric.class).annotatedWith(Names.named("gcscredential")).to(GcsCredential.class); bind(ICredentialGeneric.class).annotatedWith(Names.named("pgpcredential")).to(PgpCredential.class); - bind(ICredential.class).to(ClearCredential.class); + bind(ICredential.class).to(IAMCredential.class); bind(IDeadTokenRetriever.class).to(DeadTokenRetriever.class); bind(IPreGeneratedTokenRetriever.class).to(PreGeneratedTokenRetriever.class); bind(INewTokenRetriever.class).to(NewTokenRetriever.class); diff --git a/priam/src/main/java/com/netflix/priam/tuner/StandardTuner.java b/priam/src/main/java/com/netflix/priam/tuner/StandardTuner.java index 22ee7a338..71e23895b 100644 --- a/priam/src/main/java/com/netflix/priam/tuner/StandardTuner.java +++ b/priam/src/main/java/com/netflix/priam/tuner/StandardTuner.java @@ -57,8 +57,10 @@ public void writeAllProperties(String yamlLocation, String hostname, String seed map.put("rpc_port", config.getThriftPort()); map.put("start_native_transport", config.isNativeTransportEnabled()); map.put("native_transport_port", config.getNativeTransportPort()); - map.put("listen_address", hostname); - map.put("rpc_address", hostname); + if (hostname != null) { + map.put("listen_address", hostname); + map.put("rpc_address", hostname); + } //Dont bootstrap in restore mode if (!Restore.isRestoreEnabled(config)) { map.put("auto_bootstrap", config.getAutoBoostrap()); diff --git a/priam/src/main/resources/Priam.properties b/priam/src/main/resources/Priam.properties index a6c72ddca..cc2cfd22b 100644 --- a/priam/src/main/resources/Priam.properties +++ b/priam/src/main/resources/Priam.properties @@ -10,11 +10,11 @@ priam.backup.retention= priam.backup.threads=2 priam.bootcluster= priam.cache.location=/var/lib/cassandra/saved_caches -priam.cass.home=/mnt/cassandra +priam.cass.home=/etc/cassandra priam.cass.manual.start.enable= priam.cass.process= -priam.cass.startscript=/mnt/cassandra/bin/cassandra -priam.cass.stopscript=/mnt/cassandra/bin/cassandra +priam.cass.startscript=/etc/init.d/cassandra start +priam.cass.stopscript=/etc/init.d/cassandra stop priam.clustername=cass_cluster priam.commitlog.location=/var/lib/cassandra/commitlog priam.compaction.throughput= @@ -22,7 +22,15 @@ priam.data.location=/var/lib/cassandra/data priam.direct.memory.size.m1.large=1G priam.endpoint_snitch=org.apache.cassandra.locator.Ec2Snitch priam.heap.newgen.size.m1.large=2G -priam.heap.size.m1.large=4G +priam.heap.size.m1.large=1G +priam.heap.newgen.size.t2.small=1G +priam.heap.size.t2.small=1G +priam.heap.newgen.size.t2.micro=512M +priam.heap.size.t2.micro=512M +priam.heap.newgen.size.m3.medium=1G +priam.heap.size.m3.medium=1G +priam.heap.newgen.size.m3.large=1G +priam.heap.size.m3.large=1G priam.hint.delay= priam.hint.window= priam.jmx.port=7199 @@ -53,3 +61,4 @@ priam.thrift.port=9160 priam.upload.throttle= priam.yamlLocation= priam.zones.available= +priam.nativeTransport.enabled=true \ No newline at end of file From ad61c314c14ca487dbddec809a4cc41949efeaad Mon Sep 17 00:00:00 2001 From: Bozho Date: Thu, 22 Mar 2018 15:57:51 +0200 Subject: [PATCH 2/5] Moving instanceidentity domain configuration to the IConfiguration interface --- priam/src/main/java/com/netflix/priam/IConfiguration.java | 6 +++++- .../main/java/com/netflix/priam/aws/SDBInstanceData.java | 8 +------- .../com/netflix/priam/defaultimpl/PriamConfiguration.java | 7 +++++++ .../test/java/com/netflix/priam/FakeConfiguration.java | 5 +++++ 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/priam/src/main/java/com/netflix/priam/IConfiguration.java b/priam/src/main/java/com/netflix/priam/IConfiguration.java index ba0b8a37e..a2c877f75 100644 --- a/priam/src/main/java/com/netflix/priam/IConfiguration.java +++ b/priam/src/main/java/com/netflix/priam/IConfiguration.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; -import java.util.Set; /** * Interface for Priam's configuration @@ -739,4 +738,9 @@ public interface IConfiguration { * @return SNS Topic ARN to be used to send notification. */ public String getBackupNotificationTopicArn(); + + /** + * @return the SimpleDB domain name for storing instance identities + */ + public String getInstanceIdentityDomain(); } diff --git a/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java b/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java index 3df72e3e8..09f8c4054 100644 --- a/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java +++ b/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java @@ -50,7 +50,6 @@ public static class Attributes { public final static String HOSTNAME = "hostname"; } - public static final String DEFAULT_DOMAIN = "InstanceIdentity"; public static final String ALL_QUERY = "select * from `%s` where " + Attributes.APP_ID + "='%s'"; public static final String INSTANCE_QUERY = "select * from `%s` where " + Attributes.APP_ID + "='%s' and " + Attributes.LOCATION + "='%s' and " + Attributes.ID + "='%d'"; @@ -62,12 +61,7 @@ public static class Attributes { public SDBInstanceData(ICredential provider, IConfiguration configuration) { this.provider = provider; this.configuration = configuration; - String configuredDomain = System.getProperty("priam.sdb.instanceidentity.domain"); - if (configuredDomain == null) { - domain = DEFAULT_DOMAIN; - } else { - domain = configuredDomain; - } + this.domain = configuration.getInstanceIdentityDomain(); } /** diff --git a/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfiguration.java b/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfiguration.java index 301546c40..4bb92fcef 100644 --- a/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfiguration.java +++ b/priam/src/main/java/com/netflix/priam/defaultimpl/PriamConfiguration.java @@ -184,6 +184,7 @@ public class PriamConfiguration implements IConfiguration { private static final String CONFIG_VPC_ROLE_ASSUMPTION_ARN = PRIAM_PRE + ".vpc.roleassumption.arn"; private static final String CONFIG_DUAL_ACCOUNT = PRIAM_PRE + ".roleassumption.dualaccount"; + private static final String CONFIG_INSTANCE_IDENTITY_DOMAIN = PRIAM_PRE + ".sdb.instanceidentity.domain"; //Running instance meta data private String RAC; @@ -245,6 +246,8 @@ public class PriamConfiguration implements IConfiguration { private static final int DEFAULT_TOMBSTONE_WARNING_THRESHOLD = 1000; // C* defaults private static final int DEFAULT_TOMBSTONE_FAILURE_THRESHOLD = 100000;// C* defaults + private static final String DEFAULT_INSTANCE_IDENTITY_DOMAIN = "InstanceIdentity"; + // AWS EC2 Dual Account private static final boolean DEFAULT_DUAL_ACCOUNT = false; @@ -1127,4 +1130,8 @@ public String getBackupNotificationTopicArn() { return config.get(PRIAM_PRE + ".backup.notification.topic.arn", ""); } + @Override + public String getInstanceIdentityDomain() { + return config.get(CONFIG_INSTANCE_IDENTITY_DOMAIN, DEFAULT_INSTANCE_IDENTITY_DOMAIN); + } } diff --git a/priam/src/test/java/com/netflix/priam/FakeConfiguration.java b/priam/src/test/java/com/netflix/priam/FakeConfiguration.java index 0c8ec776d..0558c78f3 100644 --- a/priam/src/test/java/com/netflix/priam/FakeConfiguration.java +++ b/priam/src/test/java/com/netflix/priam/FakeConfiguration.java @@ -883,4 +883,9 @@ public SchedulerType getFlushSchedulerType() throws UnsupportedTypeException { public String getFlushCronExpression() { return null; } + + @Override + public String getInstanceIdentityDomain() { + return "InstanceIdentity"; + } } From 98651a9dab79877d93902b895360e080007d6d23 Mon Sep 17 00:00:00 2001 From: Bozho Date: Sat, 5 May 2018 19:18:17 +0300 Subject: [PATCH 3/5] fixing prefix handling for S3 buckets --- .../netflix/priam/aws/S3FileSystemBase.java | 75 ++++++++++++++----- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java b/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java index b4a6df950..c953434a9 100755 --- a/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java +++ b/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java @@ -15,11 +15,32 @@ */ package com.netflix.priam.aws; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.AmazonS3Exception; import com.amazonaws.services.s3.model.BucketLifecycleConfiguration; import com.amazonaws.services.s3.model.BucketLifecycleConfiguration.Rule; import com.amazonaws.services.s3.model.CompleteMultipartUploadResult; +import com.amazonaws.services.s3.model.lifecycle.LifecycleAndOperator; +import com.amazonaws.services.s3.model.lifecycle.LifecycleFilter; +import com.amazonaws.services.s3.model.lifecycle.LifecyclePredicateVisitor; +import com.amazonaws.services.s3.model.lifecycle.LifecyclePrefixPredicate; +import com.amazonaws.services.s3.model.lifecycle.LifecycleTagPredicate; import com.google.common.collect.Lists; import com.google.common.util.concurrent.RateLimiter; import com.google.inject.Provider; @@ -38,21 +59,6 @@ import com.netflix.priam.notification.EventGenerator; import com.netflix.priam.notification.EventObserver; import com.netflix.priam.scheduler.BlockingSubmitThreadPoolExecutor; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; public abstract class S3FileSystemBase implements IBackupFileSystem, EventGenerator { protected static final int MAX_CHUNKS = 10000; @@ -151,8 +157,10 @@ public void cleanup() { private boolean updateLifecycleRule(IConfiguration config, List rules, String prefix) { Rule rule = null; + PrefixVisitor visitor = new PrefixVisitor(prefix); for (BucketLifecycleConfiguration.Rule lcRule : rules) { - if (lcRule.getPrefix().equals(prefix)) { + lcRule.getFilter().getPredicate().accept(visitor); + if (visitor.isMatchesPrefix()) { rule = lcRule; break; } @@ -165,21 +173,48 @@ private boolean updateLifecycleRule(IConfiguration config, List rules, Str } if (rule == null) { // Create a new rule - rule = new BucketLifecycleConfiguration.Rule().withExpirationInDays(config.getBackupRetentionDays()).withPrefix(prefix); + rule = new BucketLifecycleConfiguration.Rule().withExpirationInDays(config.getBackupRetentionDays()) + .withFilter(new LifecycleFilter(new LifecyclePrefixPredicate(prefix))); rule.setStatus(BucketLifecycleConfiguration.ENABLED); rule.setId(prefix); rules.add(rule); - logger.info("Setting cleanup for {} to {} days", rule.getPrefix(), rule.getExpirationInDays()); + logger.info("Setting cleanup for {} to {} days", prefix, rule.getExpirationInDays()); } else if (config.getBackupRetentionDays() > 0) { - logger.info("Setting cleanup for {} to {} days", rule.getPrefix(), config.getBackupRetentionDays()); + logger.info("Setting cleanup for {} to {} days", prefix, config.getBackupRetentionDays()); rule.setExpirationInDays(config.getBackupRetentionDays()); } else { - logger.info("Removing cleanup rule for {}", rule.getPrefix()); + logger.info("Removing cleanup rule for {}", prefix); rules.remove(rule); } return true; } + + private class PrefixVisitor implements LifecyclePredicateVisitor { + private String prefix; + private boolean matchesPrefix; + + public PrefixVisitor(String prefix) { + this.prefix = prefix; + } + + @Override + public void visit(LifecycleAndOperator lifecycleAndOperator) { + } + @Override + public void visit(LifecycleTagPredicate lifecycleTagPredicate) { + } + @Override + public void visit(LifecyclePrefixPredicate lifecyclePrefixPredicate) { + if (lifecyclePrefixPredicate.getPrefix().equals(prefix)) { + matchesPrefix = true; + } + } + + public boolean isMatchesPrefix() { + return matchesPrefix; + } + } /* @param path - representation of the file uploaded @param start time of upload, in millisecs From 5791842d62f251cc856dd0000eacb316b9ced07b Mon Sep 17 00:00:00 2001 From: Bozho Date: Sat, 5 May 2018 19:26:33 +0300 Subject: [PATCH 4/5] fallback to old code in case of missing lifecycle filter --- .../com/netflix/priam/aws/S3FileSystemBase.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java b/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java index c953434a9..5e24e8930 100755 --- a/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java +++ b/priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java @@ -159,10 +159,17 @@ private boolean updateLifecycleRule(IConfiguration config, List rules, Str Rule rule = null; PrefixVisitor visitor = new PrefixVisitor(prefix); for (BucketLifecycleConfiguration.Rule lcRule : rules) { - lcRule.getFilter().getPredicate().accept(visitor); - if (visitor.isMatchesPrefix()) { - rule = lcRule; - break; + if (lcRule.getFilter() != null) { + lcRule.getFilter().getPredicate().accept(visitor); + if (visitor.isMatchesPrefix()) { + rule = lcRule; + break; + } + } else if (lcRule.getPrefix() != null) { + if (lcRule.getPrefix().equals(prefix)) { + rule = lcRule; + break; + } } } if (rule == null && config.getBackupRetentionDays() <= 0) From aa446006288120ab6e71802c18466587b3345abe Mon Sep 17 00:00:00 2001 From: Bozho Date: Mon, 4 Jan 2021 15:05:32 +0200 Subject: [PATCH 5/5] fixes --- .../src/main/java/com/netflix/priam/aws/SDBInstanceData.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java b/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java index 09f8c4054..9014ef24e 100644 --- a/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java +++ b/priam/src/main/java/com/netflix/priam/aws/SDBInstanceData.java @@ -28,6 +28,7 @@ import java.util.*; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -152,7 +153,7 @@ protected List createAttributesToRegister(PriamInstance in instance.setUpdatetime(new Date().getTime()); List attrs = new ArrayList(); attrs.add(new ReplaceableAttribute(Attributes.INSTANCE_ID, instance.getInstanceId(), false)); - attrs.add(new ReplaceableAttribute(Attributes.TOKEN, instance.getToken(), true)); + attrs.add(new ReplaceableAttribute(Attributes.TOKEN, StringUtils.trimToEmpty(instance.getToken()), true)); attrs.add(new ReplaceableAttribute(Attributes.APP_ID, instance.getApp(), true)); attrs.add(new ReplaceableAttribute(Attributes.ID, Integer.toString(instance.getId()), true)); attrs.add(new ReplaceableAttribute(Attributes.AVAILABILITY_ZONE, instance.getRac(), true)); @@ -166,7 +167,7 @@ protected List createAttributesToRegister(PriamInstance in protected List createAttributesToDeRegister(PriamInstance instance) { List attrs = new ArrayList(); attrs.add(new Attribute(Attributes.INSTANCE_ID, instance.getInstanceId())); - attrs.add(new Attribute(Attributes.TOKEN, instance.getToken())); + attrs.add(new Attribute(Attributes.TOKEN, StringUtils.trimToEmpty(instance.getToken()))); attrs.add(new Attribute(Attributes.APP_ID, instance.getApp())); attrs.add(new Attribute(Attributes.ID, Integer.toString(instance.getId()))); attrs.add(new Attribute(Attributes.AVAILABILITY_ZONE, instance.getRac()));