/**
* Licensed to Cloudera, Inc. under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. Cloudera, Inc. 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.cloudera.flume.master;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This is a master side ack tag manager.
*/
public class MasterAckManager {
static final Logger LOG = LoggerFactory.getLogger(MasterAckManager.class);
Set<String> acked = new HashSet<String>();
synchronized public void acknowledge(String ackid) {
acked.add(ackid);
}
synchronized public boolean check(String ackid) {
boolean committed = acked.contains(ackid);
if (committed) {
// For now, just keep all of them
acked.remove(ackid);
// TODO (jon) age off
// LOG.debug("Master removed " + ackid + " from tracked acks");
// this is destructive, but minimizes state.
// There is a failure case here that potentially causes duplicates.
}
return committed;
}
/**
* This method returns a copy of the current outstanding and completed ackIds
* This method is currently only used in tests.
*/
synchronized public Set<String> getPending() {
return new HashSet<String>(acked);
}
public void dumpLog() {
LOG.info("dumping ack manager state");
for (String s : acked) {
LOG.info(" " + s);
}
}
public void start() throws IOException {
// Does nothing
}
public void stop() {
// Does nothing
}
}