Skip to content

Commit

Permalink
Add protocol join/leave request/respose.
Browse files Browse the repository at this point in the history
  • Loading branch information
kuujo committed Feb 10, 2015
1 parent 6b1d184 commit 73ae953
Show file tree
Hide file tree
Showing 19 changed files with 574 additions and 36 deletions.
Expand Up @@ -24,21 +24,21 @@
* @author <a href="http://github.com/kuujo">Jordan Halterman</a> * @author <a href="http://github.com/kuujo">Jordan Halterman</a>
*/ */
abstract class AbstractRequest implements Request { abstract class AbstractRequest implements Request {
protected String member; protected String uri;


@Override @Override
public String uri() { public String uri() {
return member; return uri;
} }


@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(member); return Objects.hash(uri);
} }


@Override @Override
public String toString() { public String toString() {
return String.format("%s[uri=%s]", getClass().getCanonicalName(), member); return String.format("%s[uri=%s]", getClass().getCanonicalName(), uri);
} }


/** /**
Expand All @@ -58,13 +58,13 @@ protected Builder(U request) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public T withUri(String uri) { public T withUri(String uri) {
Assert.isNotNull(uri, "uri"); Assert.isNotNull(uri, "uri");
request.member = uri; request.uri = uri;
return (T) this; return (T) this;
} }


@Override @Override
public U build() { public U build() {
Assert.isNotNull(request.member, "uri"); Assert.isNotNull(request.uri, "uri");
return request; return request;
} }
} }
Expand Down
Expand Up @@ -24,13 +24,13 @@
* @author <a href="http://github.com/kuujo">Jordan Halterman</a> * @author <a href="http://github.com/kuujo">Jordan Halterman</a>
*/ */
abstract class AbstractResponse implements Response { abstract class AbstractResponse implements Response {
protected String member; protected String uri;
protected Status status = Status.OK; protected Status status = Status.OK;
protected Throwable error; protected Throwable error;


@Override @Override
public String uri() { public String uri() {
return member; return uri;
} }


@Override @Override
Expand All @@ -45,12 +45,12 @@ public Throwable error() {


@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(member, status); return Objects.hash(uri, status);
} }


@Override @Override
public String toString() { public String toString() {
return String.format("%s[uri=%s, status=%s]", getClass().getCanonicalName(), member, status); return String.format("%s[uri=%s, status=%s]", getClass().getCanonicalName(), uri, status);
} }


/** /**
Expand All @@ -70,7 +70,7 @@ protected Builder(U response) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public T withUri(String member) { public T withUri(String member) {
Assert.isNotNull(member, "uri"); Assert.isNotNull(member, "uri");
response.member = member; response.uri = member;
return (T) this; return (T) this;
} }


Expand All @@ -92,7 +92,7 @@ public T withError(Throwable error) {


@Override @Override
public U build() { public U build() {
Assert.isNotNull(response.member, "uri"); Assert.isNotNull(response.uri, "uri");
Assert.isNotNull(response.status, "status"); Assert.isNotNull(response.status, "status");
return response; return response;
} }
Expand Down
Expand Up @@ -120,14 +120,14 @@ public Long commitIndex() {


@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(member, term, leader, logIndex, logTerm, entries, firstIndex, commitIndex); return Objects.hash(uri, term, leader, logIndex, logTerm, entries, firstIndex, commitIndex);
} }


@Override @Override
public boolean equals(Object object) { public boolean equals(Object object) {
if (object instanceof AppendRequest) { if (object instanceof AppendRequest) {
AppendRequest request = (AppendRequest) object; AppendRequest request = (AppendRequest) object;
return request.member.equals(member) return request.uri.equals(uri)
&& request.term == term && request.term == term
&& request.leader.equals(leader) && request.leader.equals(leader)
&& request.logIndex.equals(logIndex) && request.logIndex.equals(logIndex)
Expand Down
Expand Up @@ -77,15 +77,15 @@ public Long logIndex() {


@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(member, term, succeeded, logIndex); return Objects.hash(uri, term, succeeded, logIndex);
} }


@Override @Override
public boolean equals(Object object) { public boolean equals(Object object) {
if (object instanceof AppendResponse) { if (object instanceof AppendResponse) {
AppendResponse response = (AppendResponse) object; AppendResponse response = (AppendResponse) object;
return response.status == status return response.status == status
&& response.member.equals(member) && response.uri.equals(uri)
&& response.term == term && response.term == term
&& response.succeeded == succeeded && response.succeeded == succeeded
&& response.logIndex.equals(logIndex); && response.logIndex.equals(logIndex);
Expand Down
Expand Up @@ -58,14 +58,14 @@ public ByteBuffer entry() {


@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(member, entry); return Objects.hash(uri, entry);
} }


@Override @Override
public boolean equals(Object object) { public boolean equals(Object object) {
if (object instanceof CommitRequest) { if (object instanceof CommitRequest) {
CommitRequest request = (CommitRequest) object; CommitRequest request = (CommitRequest) object;
return request.member.equals(member) return request.uri.equals(uri)
&& request.entry.equals(entry); && request.entry.equals(entry);
} }
return false; return false;
Expand Down
Expand Up @@ -56,14 +56,14 @@ public ByteBuffer result() {


@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(member, status, result); return Objects.hash(uri, status, result);
} }


@Override @Override
public boolean equals(Object object) { public boolean equals(Object object) {
if (object instanceof CommitResponse) { if (object instanceof CommitResponse) {
CommitResponse response = (CommitResponse) object; CommitResponse response = (CommitResponse) object;
return response.member.equals(member) return response.uri.equals(uri)
&& response.status == status && response.status == status
&& ((response.result == null && result == null) && ((response.result == null && result == null)
|| response.result != null && result != null && response.result.equals(result)); || response.result != null && result != null && response.result.equals(result));
Expand Down
126 changes: 126 additions & 0 deletions core/src/main/java/net/kuujo/copycat/raft/protocol/JoinRequest.java
@@ -0,0 +1,126 @@
/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.kuujo.copycat.raft.protocol;

import net.kuujo.copycat.util.internal.Assert;

import java.util.Objects;

/**
* Protocol join request.
*
* @author <a href="http://github.com/kuujo">Jordan Halterman</a>
*/
public class JoinRequest extends AbstractRequest {

/**
* Returns a new join request builder.
*
* @return A new join request builder.
*/
public static Builder builder() {
return new Builder();
}

/**
* Returns a join request builder for an existing request.
*
* @param request The request to build.
* @return The join request builder.
*/
public static Builder builder(JoinRequest request) {
return new Builder(request);
}

private String member;

/**
* Returns the member's address.
*
* @return The member's address.
*/
public String member() {
return member;
}

@Override
public int hashCode() {
return Objects.hash(uri, member);
}

@Override
public boolean equals(Object object) {
if (object instanceof JoinRequest) {
JoinRequest request = (JoinRequest) object;
return request.uri.equals(uri)
&& request.member.equals(member);
}
return false;
}

@Override
public String toString() {
return String.format("%s[member=%s]", getClass().getSimpleName(), member);
}

/**
* Join request builder.
*/
public static class Builder extends AbstractRequest.Builder<Builder, JoinRequest> {
protected Builder() {
this(new JoinRequest());
}

protected Builder(JoinRequest request) {
super(request);
}

/**
* Sets the request member.
*
* @param member The request member.
* @return The join request builder.
*/
public Builder withMember(String member) {
request.member = Assert.isNotNull(member, "member");
return this;
}

@Override
public JoinRequest build() {
super.build();
Assert.isNotNull(request.member, "member");
return request;
}

@Override
public int hashCode() {
return Objects.hash(request);
}

@Override
public boolean equals(Object object) {
return object instanceof Builder && ((Builder) object).request.equals(request);
}

@Override
public String toString() {
return String.format("%s[request=%s]", getClass().getCanonicalName(), request);
}

}

}

0 comments on commit 73ae953

Please sign in to comment.