You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by iv...@apache.org on 2012/10/10 12:29:04 UTC
svn commit: r1396536 - in /zookeeper/bookkeeper/trunk: ./
bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/
bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/
bookkeeper-server/src/main/proto/
Author: ivank
Date: Wed Oct 10 10:29:03 2012
New Revision: 1396536
URL: http://svn.apache.org/viewvc?rev=1396536&view=rev
Log:
BOOKKEEPER-418: Store hostname of locker in replication lock (ivank)
Modified:
zookeeper/bookkeeper/trunk/CHANGES.txt
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/DataFormats.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/proto/DataFormats.proto
Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1396536&r1=1396535&r2=1396536&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Wed Oct 10 10:29:03 2012
@@ -90,6 +90,8 @@ Trunk (unreleased changes)
BOOKKEEPER-405: Let's add Thread name for ReplicationWorker thread. (umamahesh via ivank)
+ BOOKKEEPER-418: Store hostname of locker in replication lock (ivank)
+
hedwig-protocol:
BOOKKEEPER-394: CompositeException message is not useful (Stu Hood via sijie)
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java?rev=1396536&r1=1396535&r2=1396536&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java Wed Oct 10 10:29:03 2012
@@ -25,6 +25,7 @@ import org.apache.bookkeeper.util.ZkUtil
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
import org.apache.bookkeeper.proto.DataFormats.LedgerRereplicationLayoutFormat;
import org.apache.bookkeeper.proto.DataFormats.UnderreplicatedLedgerFormat;
+import org.apache.bookkeeper.proto.DataFormats.LockDataFormat;
import org.apache.bookkeeper.conf.AbstractConfiguration;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.WatchedEvent;
@@ -36,6 +37,8 @@ import org.apache.zookeeper.ZooDefs.Ids;
import com.google.protobuf.TextFormat;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.util.concurrent.CountDownLatch;
@@ -92,6 +95,7 @@ public class ZkLedgerUnderreplicationMan
private final String urLedgerPath;
private final String urLockPath;
private final String layoutZNode;
+ private final LockDataFormat lockData;
private final ZooKeeper zkc;
@@ -106,6 +110,15 @@ public class ZkLedgerUnderreplicationMan
idExtractionPattern = Pattern.compile("urL(\\d+)$");
this.zkc = zkc;
+ LockDataFormat.Builder lockDataBuilder = LockDataFormat.newBuilder();
+ try {
+ lockDataBuilder.setBookieId(InetAddress.getLocalHost().getHostAddress().toString());
+ } catch (UnknownHostException uhe) {
+ // if we cant get the address, ignore. it's optional
+ // in the data structure in any case
+ }
+ lockData = lockDataBuilder.build();
+
checkLayout();
}
@@ -288,7 +301,7 @@ public class ZkLedgerUnderreplicationMan
}
long ledgerId = getLedgerId(tryChild);
- zkc.create(lockPath, new byte[0],
+ zkc.create(lockPath, TextFormat.printToString(lockData).getBytes(UTF8),
Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
heldLocks.put(ledgerId, new Lock(lockPath, stat.getVersion()));
return ledgerId;
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/DataFormats.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/DataFormats.java?rev=1396536&r1=1396535&r2=1396536&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/DataFormats.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/DataFormats.java Wed Oct 10 10:29:03 2012
@@ -3199,6 +3199,381 @@ public final class DataFormats {
// @@protoc_insertion_point(class_scope:CookieFormat)
}
+ public interface LockDataFormatOrBuilder
+ extends com.google.protobuf.MessageOrBuilder {
+
+ // optional string bookieId = 1;
+ boolean hasBookieId();
+ String getBookieId();
+ }
+ public static final class LockDataFormat extends
+ com.google.protobuf.GeneratedMessage
+ implements LockDataFormatOrBuilder {
+ // Use LockDataFormat.newBuilder() to construct.
+ private LockDataFormat(Builder builder) {
+ super(builder);
+ }
+ private LockDataFormat(boolean noInit) {}
+
+ private static final LockDataFormat defaultInstance;
+ public static LockDataFormat getDefaultInstance() {
+ return defaultInstance;
+ }
+
+ public LockDataFormat getDefaultInstanceForType() {
+ return defaultInstance;
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return org.apache.bookkeeper.proto.DataFormats.internal_static_LockDataFormat_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return org.apache.bookkeeper.proto.DataFormats.internal_static_LockDataFormat_fieldAccessorTable;
+ }
+
+ private int bitField0_;
+ // optional string bookieId = 1;
+ public static final int BOOKIEID_FIELD_NUMBER = 1;
+ private java.lang.Object bookieId_;
+ public boolean hasBookieId() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+ public String getBookieId() {
+ java.lang.Object ref = bookieId_;
+ if (ref instanceof String) {
+ return (String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ String s = bs.toStringUtf8();
+ if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+ bookieId_ = s;
+ }
+ return s;
+ }
+ }
+ private com.google.protobuf.ByteString getBookieIdBytes() {
+ java.lang.Object ref = bookieId_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+ bookieId_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private void initFields() {
+ bookieId_ = "";
+ }
+ private byte memoizedIsInitialized = -1;
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized != -1) return isInitialized == 1;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getSerializedSize();
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ output.writeBytes(1, getBookieIdBytes());
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public int getSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeBytesSize(1, getBookieIdBytes());
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSerializedSize = size;
+ return size;
+ }
+
+ private static final long serialVersionUID = 0L;
+ @java.lang.Override
+ protected java.lang.Object writeReplace()
+ throws java.io.ObjectStreamException {
+ return super.writeReplace();
+ }
+
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return newBuilder().mergeFrom(data).buildParsed();
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return newBuilder().mergeFrom(data, extensionRegistry)
+ .buildParsed();
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return newBuilder().mergeFrom(data).buildParsed();
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return newBuilder().mergeFrom(data, extensionRegistry)
+ .buildParsed();
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return newBuilder().mergeFrom(input).buildParsed();
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return newBuilder().mergeFrom(input, extensionRegistry)
+ .buildParsed();
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ Builder builder = newBuilder();
+ if (builder.mergeDelimitedFrom(input)) {
+ return builder.buildParsed();
+ } else {
+ return null;
+ }
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ Builder builder = newBuilder();
+ if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+ return builder.buildParsed();
+ } else {
+ return null;
+ }
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return newBuilder().mergeFrom(input).buildParsed();
+ }
+ public static org.apache.bookkeeper.proto.DataFormats.LockDataFormat parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return newBuilder().mergeFrom(input, extensionRegistry)
+ .buildParsed();
+ }
+
+ public static Builder newBuilder() { return Builder.create(); }
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder(org.apache.bookkeeper.proto.DataFormats.LockDataFormat prototype) {
+ return newBuilder().mergeFrom(prototype);
+ }
+ public Builder toBuilder() { return newBuilder(this); }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessage.Builder<Builder>
+ implements org.apache.bookkeeper.proto.DataFormats.LockDataFormatOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return org.apache.bookkeeper.proto.DataFormats.internal_static_LockDataFormat_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return org.apache.bookkeeper.proto.DataFormats.internal_static_LockDataFormat_fieldAccessorTable;
+ }
+
+ // Construct using org.apache.bookkeeper.proto.DataFormats.LockDataFormat.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+ }
+ }
+ private static Builder create() {
+ return new Builder();
+ }
+
+ public Builder clear() {
+ super.clear();
+ bookieId_ = "";
+ bitField0_ = (bitField0_ & ~0x00000001);
+ return this;
+ }
+
+ public Builder clone() {
+ return create().mergeFrom(buildPartial());
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return org.apache.bookkeeper.proto.DataFormats.LockDataFormat.getDescriptor();
+ }
+
+ public org.apache.bookkeeper.proto.DataFormats.LockDataFormat getDefaultInstanceForType() {
+ return org.apache.bookkeeper.proto.DataFormats.LockDataFormat.getDefaultInstance();
+ }
+
+ public org.apache.bookkeeper.proto.DataFormats.LockDataFormat build() {
+ org.apache.bookkeeper.proto.DataFormats.LockDataFormat result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ private org.apache.bookkeeper.proto.DataFormats.LockDataFormat buildParsed()
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ org.apache.bookkeeper.proto.DataFormats.LockDataFormat result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(
+ result).asInvalidProtocolBufferException();
+ }
+ return result;
+ }
+
+ public org.apache.bookkeeper.proto.DataFormats.LockDataFormat buildPartial() {
+ org.apache.bookkeeper.proto.DataFormats.LockDataFormat result = new org.apache.bookkeeper.proto.DataFormats.LockDataFormat(this);
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+ to_bitField0_ |= 0x00000001;
+ }
+ result.bookieId_ = bookieId_;
+ result.bitField0_ = to_bitField0_;
+ onBuilt();
+ return result;
+ }
+
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof org.apache.bookkeeper.proto.DataFormats.LockDataFormat) {
+ return mergeFrom((org.apache.bookkeeper.proto.DataFormats.LockDataFormat)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(org.apache.bookkeeper.proto.DataFormats.LockDataFormat other) {
+ if (other == org.apache.bookkeeper.proto.DataFormats.LockDataFormat.getDefaultInstance()) return this;
+ if (other.hasBookieId()) {
+ setBookieId(other.getBookieId());
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder(
+ this.getUnknownFields());
+ while (true) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ this.setUnknownFields(unknownFields.build());
+ onChanged();
+ return this;
+ default: {
+ if (!parseUnknownField(input, unknownFields,
+ extensionRegistry, tag)) {
+ this.setUnknownFields(unknownFields.build());
+ onChanged();
+ return this;
+ }
+ break;
+ }
+ case 10: {
+ bitField0_ |= 0x00000001;
+ bookieId_ = input.readBytes();
+ break;
+ }
+ }
+ }
+ }
+
+ private int bitField0_;
+
+ // optional string bookieId = 1;
+ private java.lang.Object bookieId_ = "";
+ public boolean hasBookieId() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+ public String getBookieId() {
+ java.lang.Object ref = bookieId_;
+ if (!(ref instanceof String)) {
+ String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+ bookieId_ = s;
+ return s;
+ } else {
+ return (String) ref;
+ }
+ }
+ public Builder setBookieId(String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000001;
+ bookieId_ = value;
+ onChanged();
+ return this;
+ }
+ public Builder clearBookieId() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ bookieId_ = getDefaultInstance().getBookieId();
+ onChanged();
+ return this;
+ }
+ void setBookieId(com.google.protobuf.ByteString value) {
+ bitField0_ |= 0x00000001;
+ bookieId_ = value;
+ onChanged();
+ }
+
+ // @@protoc_insertion_point(builder_scope:LockDataFormat)
+ }
+
+ static {
+ defaultInstance = new LockDataFormat(true);
+ defaultInstance.initFields();
+ }
+
+ // @@protoc_insertion_point(class_scope:LockDataFormat)
+ }
+
private static com.google.protobuf.Descriptors.Descriptor
internal_static_LedgerMetadataFormat_descriptor;
private static
@@ -3224,6 +3599,11 @@ public final class DataFormats {
private static
com.google.protobuf.GeneratedMessage.FieldAccessorTable
internal_static_CookieFormat_fieldAccessorTable;
+ private static com.google.protobuf.Descriptors.Descriptor
+ internal_static_LockDataFormat_descriptor;
+ private static
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_LockDataFormat_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
@@ -3250,7 +3630,8 @@ public final class DataFormats {
"erFormat\022\017\n\007replica\030\001 \003(\t\"^\n\014CookieForma" +
"t\022\022\n\nbookieHost\030\001 \002(\t\022\022\n\njournalDir\030\002 \002(" +
"\t\022\022\n\nledgerDirs\030\003 \002(\t\022\022\n\ninstanceId\030\004 \001(" +
- "\tB\037\n\033org.apache.bookkeeper.protoH\001"
+ "\t\"\"\n\016LockDataFormat\022\020\n\010bookieId\030\001 \001(\tB\037\n" +
+ "\033org.apache.bookkeeper.protoH\001"
};
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -3297,6 +3678,14 @@ public final class DataFormats {
new java.lang.String[] { "BookieHost", "JournalDir", "LedgerDirs", "InstanceId", },
org.apache.bookkeeper.proto.DataFormats.CookieFormat.class,
org.apache.bookkeeper.proto.DataFormats.CookieFormat.Builder.class);
+ internal_static_LockDataFormat_descriptor =
+ getDescriptor().getMessageTypes().get(4);
+ internal_static_LockDataFormat_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_LockDataFormat_descriptor,
+ new java.lang.String[] { "BookieId", },
+ org.apache.bookkeeper.proto.DataFormats.LockDataFormat.class,
+ org.apache.bookkeeper.proto.DataFormats.LockDataFormat.Builder.class);
return null;
}
};
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/proto/DataFormats.proto
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/proto/DataFormats.proto?rev=1396536&r1=1396535&r2=1396536&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/proto/DataFormats.proto (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/proto/DataFormats.proto Wed Oct 10 10:29:03 2012
@@ -68,3 +68,10 @@ message CookieFormat {
required string ledgerDirs = 3;
optional string instanceId = 4;
}
+
+/**
+ * Debug information for locks
+ */
+message LockDataFormat {
+ optional string bookieId = 1;
+}
\ No newline at end of file