-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Etcd membership module #17736
Add Etcd membership module #17736
Conversation
d138857
to
aa46aa4
Compare
Automated checks report:
Some checks failed. Please fix the reported issues and reply 'alluxio-bot, check this please' to re-run checks. |
Automated checks report:
All checks passed! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are there plans to introduce dependency injection through Guice to this new code? That would match the rest of the worker code.
dora/core/client/fs/src/main/java/alluxio/client/metrics/MetricsHeartbeatContext.java
Outdated
Show resolved
Hide resolved
public void connect() { | ||
connect(false); | ||
} | ||
|
||
public void connect(boolean force) { | ||
if (mConnected.get() && !force) { | ||
return; | ||
} | ||
mConnected.set(false); | ||
// create client using endpoints | ||
Client client = Client.builder().endpoints(mEndpoints) | ||
.build(); | ||
if (mConnected.compareAndSet(false, true)) { | ||
mClient = client; | ||
} | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Client creation should equal client connection, as is the case for gRPC clients and raw etcd clients. wdyt?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i actually refer to AbstractClient.connect() which is called within retryRpcInternal, and got triggered on first rpc call made to grpc services. Therefore AlluxioEtcdClient.connect() is getting called on first usage of itself, like getEtcdClient(), start a new ServiceDiscovery() instance where the instantiation is embedded in AlluxioEtcdClient constructor, so in a way, AlluxioEtcdClient.connect gets called at time of instantiation.
dora/core/common/src/main/java/alluxio/membership/ServiceDiscoveryRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/ServiceDiscoveryRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/EtcdMembershipManager.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/EtcdMembershipManager.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/EtcdMembershipManager.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks Lucy, amazing work! I have some comments from a perspective of a consumer (e.g. worker selection policies) of this API.
* @return all registered workers | ||
* @throws IOException | ||
*/ | ||
public List<WorkerInfo> getAllMembers() throws IOException; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we make the return type a dedicated data structure? e.g. a ClusterMembershipView
that allows doing things more efficiently?
- checking if a worker is a member of the cluster
This is more efficient if done with a Set
instead of a List
.
- checking if two view snapshots are the same, and
- calculating the diff between two view snapshots
These two are useful for worker selection policies to tell if it is necessary to invalidate their cached view of the cluster members. For example WorkerLocationPolicy.ConsistentHashProvider
currently caches the list of workers to save the cost of rebuilding a hash ring every time when called to decide the preferred worker for a file.
- seletively querying workers by their properties, e.g. liveness
So that you can move the getLiveMemebers
getFailedMember
methods to the view object and make this interface cleaner.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
like public ClusterMembershipView getView() {
return new ClusterMembershipView()
}
ClusterMembershipView {
equals();
getLiveMembers
getFailedMembers
}
like this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes exactly!
dora/core/client/fs/src/main/java/alluxio/client/file/FileSystemContext.java
Outdated
Show resolved
Hide resolved
dora/core/client/fs/src/main/java/alluxio/client/file/FileSystemContext.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks for the PR! this is my 1st batch of comments mostly on style and readability. I didn't get into details of the logics
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Show resolved
Hide resolved
private static final Lock INSTANCE_LOCK = new ReentrantLock(); | ||
@GuardedBy("INSTANCE_LOCK") | ||
private static final AtomicReference<AlluxioEtcdClient> ALLUXIO_ETCD_CLIENT = new AtomicReference<>(); | ||
protected AtomicBoolean mConnected = new AtomicBoolean(false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we need this mMember to be protected
and not final
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
think u meant mConnected?
changed to private final
dora/core/common/src/main/java/alluxio/membership/BarrierRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/BarrierRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/BarrierRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/BarrierRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Outdated
Show resolved
Hide resolved
1d56796
to
f8ffeed
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cleanup related comments
dora/core/server/worker/src/main/java/alluxio/worker/AlluxioWorker.java
Outdated
Show resolved
Hide resolved
dora/core/server/worker/src/main/java/alluxio/worker/dora/PagedDoraWorker.java
Outdated
Show resolved
Hide resolved
dora/tests/src/test/java/alluxio/client/cli/fsadmin/command/DoctorCommandIntegrationTest.java
Show resolved
Hide resolved
dora/tests/src/test/java/alluxio/server/worker/WorkerMetadataSyncIntegrationTest.java
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/EtcdMembershipManager.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/ServiceDiscoveryRecipe.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
non java changes look good to me
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey sorry I just submitted a 1st batch of comments as I haven't fully read the longest few classes. I will try to finish very soon.
try { | ||
GetResponse getResp = mClient.getKVClient().get( | ||
ByteSequence.from(mBarrierPath, StandardCharsets.UTF_8)).get(); | ||
LOG.info("get key:{}, [{}]", mBarrierPath, getResp.getKvs()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
will this be noisy for INFO log?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
actually this class is not used anywhere, but keeping it thinking it might be useful in future, will remove it as part of this PR
dora/core/common/src/main/java/alluxio/membership/BarrierRecipe.java
Outdated
Show resolved
Hide resolved
dora/tests/src/test/java/alluxio/client/cli/fsadmin/command/DoctorCommandIntegrationTest.java
Show resolved
Hide resolved
dora/tests/src/test/java/alluxio/server/worker/WorkerMetadataSyncIntegrationTest.java
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/BarrierRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/BarrierRecipe.java
Outdated
Show resolved
Hide resolved
dora/core/common/src/main/java/alluxio/membership/ServiceEntity.java
Outdated
Show resolved
Hide resolved
@@ -83,7 +84,8 @@ enum Command { | |||
SUMMARY, // Report cluster summary | |||
UFS, // Report under filesystem information | |||
JOBSERVICE, // Report job service metrics information | |||
PROXY // Report proxy information in the cluster | |||
PROXY, // Report proxy information in the cluster |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we use bin/alluxio fsadmin report capacity
to list all workers and their capacity. Does that overlap with what you are doing here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this doesn't report any worker capacity info, only the live/fail status of each worker
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry about the delay! I just added the rest of my comments. Honestly majority of those are about formatting and readability, with a few sanity checks for potential catches. PTAL, thanks!
dora/core/common/src/main/java/alluxio/membership/MembershipManager.java
Outdated
Show resolved
Hide resolved
case STATIC: | ||
return new StaticMembershipManager(conf); | ||
case ETCD: | ||
return new EtcdMembershipManager(conf); | ||
case NOOP: | ||
return new NoOpMembershipManager(); | ||
default: | ||
throw new IOException("Unrecognized Membership Type."); | ||
throw new IllegalStateException("Unrecognized Membership Type"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: what this type is when unrecognized
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it would directly throw exception without returning any type
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i mean i think you can log the unrecognized type in the exception for better troubleshooting, just a nit
conf/etcd/etcd.conf.template
Outdated
listen-peer-urls: http://172.31.30.204:2380 | ||
|
||
# List of comma separated URLs to listen on for client traffic. | ||
#give ip/hostname of this etcd instance | ||
listen-client-urls: http://172.31.30.204:2379,http://127.0.0.1:2379 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think an example fits better in comments. So a user wouldn't just copy this config and start and see mysterious errors/behaviors.
StandardOutput=append:/var/log/etcd.log | ||
StandardError=append:/var/log/etcd.err |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mac has /var/log
but that belongs to root. I figure it's worth mentioning in a short comment, that one can use this path on Mac but may need sudo. I figure the template file is most useful when one want to test and experience a feature, and that test may very likely happen on Mac instead of linux.
dora/core/client/fs/src/main/java/alluxio/client/file/FileSystemContext.java
Show resolved
Hide resolved
// revision number of kv pair of registered entity on etcd, used for CASupdate | ||
protected long mRevision; | ||
public final ReentrantLock mLock = new ReentrantLock(); | ||
public AtomicBoolean mNeedReconnect = new AtomicBoolean(false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add some comments about the thread safety requirements and guarantees, as I can't make a reasonable guess based on these fields here. Do you need volatile
for the mRevision
as you wanna CAS it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[ADDRESS IN NEXT PR]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done.
*/ | ||
public class HashUtils { | ||
|
||
private static final HashFunction HASH_FUNCTION = murmur3_32_fixed(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: this hash func is deprecated but it matters little here
@@ -54,6 +54,11 @@ public List<WorkerInfo> getWorkerInfos() { | |||
} | |||
} | |||
|
|||
@Override | |||
public List<WorkerInfo> getLiveWorkerInfos() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just wanted to make sure, this does not throw any declared exception, meaning all errors will be RuntimeException?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there should be, this needs to be further revamped when developing etcd interaction for scheduler
mConf, ServerUserState.global())); | ||
// TODO(lucy): temporary fallback logic during transition of removing master dependency | ||
if (mMembershipManager instanceof NoOpMembershipManager) { | ||
getExecutorService() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add a log here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[ADDRESS IN NEXT PR]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
registerToMaster(); | ||
return; | ||
} | ||
while (true) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: a little log here, as you might get stuck in this loop?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RetryPolicy has a max duration of attempted retry.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks for the contribution! I left comments, most are about coding convention.
dora/core/client/fs/src/main/java/alluxio/client/file/FileSystemContext.java
Show resolved
Hide resolved
+ "Choose STATIC for pre-configured members." | ||
+ "Choose ETCD for using etcd for membership management") | ||
.setConsistencyCheckLevel(ConsistencyCheckLevel.WARN) | ||
.setScope(Scope.WORKER) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this membership type will affect client behavior, correct? if yes, it shall be ALL
scope
.setScope(Scope.WORKER) | |
.setScope(Scope.ALL) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
.setDescription("Type of membership manager used for workers." | ||
+ "Choose STATIC for pre-configured members." | ||
+ "Choose ETCD for using etcd for membership management") | ||
.setConsistencyCheckLevel(ConsistencyCheckLevel.WARN) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is a critical config that all components need to have the same consistent setting.
.setConsistencyCheckLevel(ConsistencyCheckLevel.WARN) | |
.setConsistencyCheckLevel(ConsistencyCheckLevel.ENFORCE) |
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Show resolved
Hide resolved
* Base Entity class including information to register to Etcd | ||
* when using EtcdMembershipManager. | ||
*/ | ||
public class ServiceEntity implements Closeable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would make a ServiceEntity
interface with the only required methods,
but leaving this implementation like BasicServiceEntry
or DefaultServiceEntry
.
Actually will there be any one create an instance of this class? I didn't find one though.
Also, this does not look like threadsafe to me
* MembershipManager configured by a static file. | ||
*/ | ||
public class StaticMembershipManager implements MembershipManager { | ||
List<WorkerInfo> mMembers; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
private final
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
* @param conf | ||
* @throws IOException | ||
*/ | ||
public StaticMembershipManager(AlluxioConfiguration conf) throws IOException { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
constructors shall be simple and always succeed without throwing Exceptions.
Check alluxio.client.file.cache.LocalCacheManager#create
and alluxio.client.file.cache.LocalCacheManager#LocalCacheManager
,
create
is a static factory method that can through exceptions, while LocalCacheManager
is a constructor purely receiving member assignment (absolutely will complete)
Handling a constructor that can throw exceptions is tricky
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
private void register() throws IOException { | ||
Preconditions.checkState(mAddress != null, "worker not started"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Preconditions.checkState(mAddress != null, "worker not started"); | |
Preconditions.checkNotNull(mAddress, "worker not started"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a lot for the great work! I'm good except a few doc-related commends like https://github.com/Alluxio/alluxio/pull/17736/files#r1275694116
Despite that there are few comments from Bin which can lead to code changes, I will give my stamp in order not to block the progress. I'll leave the rest to your judgements :P
…ringBuffer else where on frequent paths
2. use conf/workers as default static worker membership mgr typed file and use existing util to parse it accordingly
…ration of thread safety / atomicity / race condition addressing in doc. Remove unwanted lock. 2. Close MembershipManager properly in Worker close & FileSystemContext closeContext 3. address more review comments
d6541e6
to
c87bce8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please address in this PR (git related)
- the change in this PR for
dora/core/server/worker/src/main/java/alluxio/worker/AlluxioWorker.java
looks like a regression from main branch. please fix it - change in
dora/tests/pom.xml
also looks like a rebase regression
In follow up PR
- please remember address comments w.r.t. potential stream resource leak in dora/core/common/src/main/java/alluxio/membership/EtcdMembershipManager.java.
try (AutoCloseable ignoredCloser = mMembershipManager) { | ||
// do nothing as we are closing | ||
} catch (Exception e) { | ||
throw new IOException(e); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this necessary since there is nothing inside the try-catch block?
how is this different from simply calling mMembershipManager.close()
?
public static final PropertyKey ALLUXIO_CLUSTER_NAME = | ||
stringBuilder(Name.ALLUXIO_CLUSTER_NAME) | ||
.setDefaultValue("DefaultAlluxioCluster").build(); | ||
public static final PropertyKey ETCD_ENDPOINTS = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please address this also in the next PR @lucyge2022
* its atomicity/consistency semantics goes with what ETCD has to offer, this class | ||
* does not add upon any semantics itself. | ||
* | ||
* AlluxioEtcdClient should only be used as singleton wrapping one jetcd Client object, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
very helpful javadoc!
* @param watchType | ||
*/ | ||
private void addListenerInternal( | ||
String parentPath, StateListener listener, WatchType watchType) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we need to check if parentPath
is not an empty String?
break; | ||
case UNRECOGNIZED: // Fall through | ||
default: | ||
LOG.info("Unrecognized event:{} on watch path of:{}", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LOG.error
try { | ||
unregisterService(entry.getKey()); | ||
} catch (IOException ex) { | ||
LOG.info("Unregister all services failed unregistering for:{}.", entry.getKey(), ex); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LOG.error?
newLeaseInternal(entity); | ||
entity.mNeedReconnect.set(false); | ||
} catch (IOException e) { | ||
LOG.info("Failed trying to new the lease for service:{}", entity, e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LOG.error
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
} | ||
|
||
@Override | ||
@VisibleForTesting |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove @VisibleForTesting
in the following methods.
we just need it in the interface, only for these methods only exposed for testing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
@@ -229,7 +238,8 @@ public static String description() { | |||
+ " metrics metrics information\n" | |||
+ " summary cluster summary\n" | |||
+ " ufs under storage system information\n" | |||
+ " jobservice job service metrics information\n"; | |||
+ " jobservice job service metrics information\n" | |||
+ " nodestatus node status [worker as of now]\n"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
feel free to leave it next pr, but we shall just call this cmd either status
or nodes
(workers
).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[ADDRESS IN NEXT PR]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not part of ReportCommand anymore, I have created another fsadmin cmd, named "nodes", we can do showstatus or other admin functionalities such as remove nodes over there.
introduced in #17890
e.g.
$bin/alluxio fsadmin nodes status
dora/tests/pom.xml
Outdated
@@ -88,6 +88,7 @@ | |||
<dependency> | |||
<groupId>org.testcontainers</groupId> | |||
<artifactId>testcontainers</artifactId> | |||
<version>1.14.3</version> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not needed
alluxio-bot, merge this please |
merge failed: |
alluxio-bot, merge this please |
dora/core/common/src/main/java/alluxio/membership/AlluxioEtcdClient.java
Show resolved
Hide resolved
// | ||
public static final PropertyKey ALLUXIO_CLUSTER_NAME = | ||
stringBuilder(Name.ALLUXIO_CLUSTER_NAME) | ||
.setDefaultValue("DefaultAlluxioCluster").build(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why aren't all the builder fields being set? specifically
- for ALLUXIO_CLUSTER_NAME: setDescription, setScope, setConsistencyCheckLevel
- for WORKER_MEMBERSHIP_ETCD_ENDPOINTS: setScope, setConsistencyCheckLevel
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh i think i missed it, let me add it, is it causing any problems now?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not yet but... 🤷
What changes are proposed in this pull request?
Add membership module for dora membership management.
Why are the changes needed?
Allow usage of etcd cluster or static configuration instead of Master for membership management
Does this PR introduce any user facing changes?
No