blob: 5b788e2064ab62547b6c440a18b6624901736c28 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 com.twitter.distributedlog.zk;
import com.twitter.distributedlog.util.Transaction.OpListener;
import org.apache.bookkeeper.meta.ZkVersion;
import org.apache.bookkeeper.versioning.Version;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.Op;
import org.apache.zookeeper.OpResult;
import javax.annotation.Nullable;
/**
* ZooKeeper Operation that plays with {@link org.apache.bookkeeper.versioning.Version}
*/
public class ZKVersionedSetOp extends ZKOp {
private final OpListener<Version> listener;
public ZKVersionedSetOp(Op op,
@Nullable OpListener<Version> opListener) {
super(op);
this.listener = opListener;
}
@Override
protected void commitOpResult(OpResult opResult) {
assert(opResult instanceof OpResult.SetDataResult);
OpResult.SetDataResult setDataResult = (OpResult.SetDataResult) opResult;
if (null != listener) {
listener.onCommit(new ZkVersion(setDataResult.getStat().getVersion()));
}
}
@Override
protected void abortOpResult(Throwable t,
@Nullable OpResult opResult) {
Throwable cause;
if (null == opResult) {
cause = t;
} else {
assert (opResult instanceof OpResult.ErrorResult);
OpResult.ErrorResult errorResult = (OpResult.ErrorResult) opResult;
if (KeeperException.Code.OK.intValue() == errorResult.getErr()) {
cause = t;
} else {
cause = KeeperException.create(KeeperException.Code.get(errorResult.getErr()));
}
}
if (null != listener) {
listener.onAbort(cause);
}
}
}