Skip to content

Commit

Permalink
Bug 501841 - Add more logging to controllers
Browse files Browse the repository at this point in the history
* Fix compile issues

Change-Id: Id3bd5957c7e5ea2d837ba639cffb2588aa1f2a79
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
  • Loading branch information
jfaltermeier committed Jan 26, 2017
1 parent b454b04 commit 8789e32
Showing 1 changed file with 51 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,13 @@
******************************************************************************/
package org.eclipse.emf.emfstore.internal.server.model.versioning.operations.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.emfstore.internal.common.model.util.FileUtil;
import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
Expand Down Expand Up @@ -80,9 +72,11 @@ public static AbstractChangePackage createChangePackage(boolean useInMemoryChang
* the max number of operations a single fragment may consists of
* @return an iterator for the created fragments
*/
public static Iterator<ChangePackageEnvelope> splitChangePackage(final FileBasedChangePackage changePackage,
public static Iterator<ChangePackageEnvelope> splitChangePackage(final AbstractChangePackage changePackage,
final int changePackageFragmentSize) {

return new ChangePackageSplittingIterator(changePackageFragmentSize, changePackage);

}

/**
Expand Down Expand Up @@ -173,100 +167,80 @@ private static int getSize(CompositeOperation compositeOperation) {
*/
private static final class ChangePackageSplittingIterator implements Iterator<ChangePackageEnvelope> {
private final int changePackageFragmentSize;
private final FileBasedChangePackage changePackage;
private final AbstractChangePackage changePackage;
private int fragmentIndex;
private int count;
private ChangePackageEnvelope envelope;
private boolean isInitialized;
private Iterator<AbstractOperation> operationsIterator;
private ESCloseableIterable<AbstractOperation> operationsIterable;

ChangePackageSplittingIterator(int changePackageFragmentSize, FileBasedChangePackage changePackage) {
ChangePackageSplittingIterator(int changePackageFragmentSize, AbstractChangePackage changePackage) {
this.changePackageFragmentSize = changePackageFragmentSize;
this.changePackage = changePackage;
ModelUtil.logProjectDetails(
MessageFormat.format("Splitting change package {0}", changePackage.getFilePath()), null, null, null, //$NON-NLS-1$
null, -1);
if (FileBasedChangePackage.class.isInstance(changePackage)) {
ModelUtil.logProjectDetails(MessageFormat.format("Splitting change package {0}", //$NON-NLS-1$
FileBasedChangePackage.class.cast(changePackage).getFilePath()), null, null, null, null, -1);
}
}

private void init() {
int leafSizeCounter = 0;
// it is not necessary to close the operations iterable, because the iterator already does this
// in hasNext() if there are no more operations
final ESCloseableIterable<AbstractOperation> operations = changePackage.operations();
for (final AbstractOperation operation : operations.iterable()) {
final int countLeafOperations = countLeafOperations(operation);
leafSizeCounter += countLeafOperations;
if (leafSizeCounter < changePackageFragmentSize) {
continue;
}
leafSizeCounter = 0;
count += 1;
}
if (leafSizeCounter != 0 || count == 0) {
count += 1;
}
operationsIterable = changePackage.operations();
operationsIterator = operationsIterable.iterable().iterator();
}

public boolean hasNext() {

if (!isInitialized) {
if (operationsIterable == null) {
init();
}

if (envelope == null) {
envelope = VersioningFactory.eINSTANCE.createChangePackageEnvelope();
final ChangePackage cp = VersioningFactory.eINSTANCE.createChangePackage();
cp.setLogMessage(ModelUtil.clone(changePackage.getLogMessage()));
envelope.setFragmentCount(count);
}

final List<String> readLines = readLines(fragmentIndex * changePackageFragmentSize, changePackage,
changePackageFragmentSize);
envelope.getFragment().addAll(readLines);

envelope.setFragmentIndex(fragmentIndex);
while (countLeafOperations(envelope.getFragment()) < changePackageFragmentSize
&& operationsIterator.hasNext()) {

if (!envelope.getFragment().isEmpty() || fragmentIndex == 0) {
ModelUtil.logProjectDetails(MessageFormat.format("Fragment {1} for Change package {0} prepared", //$NON-NLS-1$
changePackage.getFilePath(), fragmentIndex), null, null, null, null, -1);
return true;
final AbstractOperation op = operationsIterator.next();
envelope.getFragment().add(ModelUtil.clone(op));
}

ModelUtil.logProjectDetails(
MessageFormat.format("No more change package fragments for {0}", changePackage.getFilePath()), null, //$NON-NLS-1$
null, null, null, -1);
return false;
}
envelope.setFragmentIndex(fragmentIndex);

private void init() {
LineNumberReader lineNumberReader = null;
try {
lineNumberReader = new LineNumberReader(new FileReader(new File(changePackage.getTempFilePath())));
lineNumberReader.skip(Long.MAX_VALUE);
final int lines = lineNumberReader.getLineNumber() + 1;
count = lines / changePackageFragmentSize;
if (lines % changePackageFragmentSize != 0) {
count += 1;
if (!envelope.getFragment().isEmpty() || fragmentIndex == 0) {
if (FileBasedChangePackage.class.isInstance(changePackage)) {
ModelUtil.logProjectDetails(
MessageFormat.format("Fragment {1} for Change package {0} prepared", //$NON-NLS-1$
FileBasedChangePackage.class.cast(changePackage).getFilePath(), fragmentIndex),
null, null, null, null, -1);
}
} catch (final FileNotFoundException ex) {
throw new IllegalStateException(ex);
} catch (final IOException ex) {
throw new IllegalStateException(ex);
} finally {
IOUtils.closeQuietly(lineNumberReader);
return true;
}
isInitialized = true;
}

private List<String> readLines(int from, final FileBasedChangePackage changePackage,
final int changePackageFragmentSize) {

int readLines = 0;
FileReader reader;
final List<String> lines = new ArrayList<String>();

try {
reader = new FileReader(new File(changePackage.getTempFilePath()));
final LineIterator lineIterator = new LineIterator(reader);
int read = 0;

while (read < from) {
if (!lineIterator.hasNext()) {
return lines;
}
lineIterator.next();
read += 1;
}

while (readLines < changePackageFragmentSize && lineIterator.hasNext()) {
final String nextLine = lineIterator.next();
readLines += 1;
lines.add(nextLine);
}

} catch (final FileNotFoundException ex) {
throw new IllegalStateException(ex);
if (FileBasedChangePackage.class.isInstance(changePackage)) {
ModelUtil.logProjectDetails(MessageFormat.format("No more change package fragments for {0}", //$NON-NLS-1$
FileBasedChangePackage.class.cast(changePackage).getFilePath()), null, null, null, null, -1);
}

return lines;
return false;
}

public ChangePackageEnvelope next() {
Expand Down

0 comments on commit 8789e32

Please sign in to comment.