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>
*/
abstract class AbstractRequest implements Request {
protected String member;
protected String uri;

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

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

@Override
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")
public T withUri(String uri) {
Assert.isNotNull(uri, "uri");
request.member = uri;
request.uri = uri;
return (T) this;
}

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

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

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

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

@Override
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")
public T withUri(String member) {
Assert.isNotNull(member, "uri");
response.member = member;
response.uri = member;
return (T) this;
}

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

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

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

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

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

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

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

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

@Override
public boolean equals(Object object) {
if (object instanceof CommitResponse) {
CommitResponse response = (CommitResponse) object;
return response.member.equals(member)
return response.uri.equals(uri)
&& response.status == status
&& ((response.result == null && result == null)
|| 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.