For example (delegating all public methods from AbstractCompactionStrategy
and some from TimeWindowCompactionStrategy EXCEPT getName() )::::

package com.jeffjirsa.cassandra.db.compaction;

public class TimeWindowCompactionStrategy extends AbstractCompactionStrategy
{
    org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy
delegate;

    public TimeWindowCompactionStrategy(ColumnFamilyStore cfs,
Map<String,String> options) {
    delegate = new
org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy(cfs,options);
    }


    public Directories getDirectories() { return delegate.getDirectories();
}
    public synchronized void pause() { delegate.pause(); }
    public synchronized void resume() { delegate.resume(); }
    public synchronized void startup() { delegate.startup(); }
    public synchronized void shutdown() { delegate.shutdown(); }



    public AbstractCompactionTask getNextBackgroundTask(int gcBefore) {
return delegate.getNextBackgroundTask(gcBefore); }
    public synchronized Collection<AbstractCompactionTask>
getMaximalTask(int gcBefore, boolean splitOutput) { return
delegate.getMaximalTask(gcBefore, splitOutput); }
    public synchronized AbstractCompactionTask
getUserDefinedTask(Collection<SSTableReader> sstables, int gcBefore) {
return getUserDefinedTask(sstables,gcBefore); }
    public int getEstimatedRemainingTasks() { return
delegate.getEstimatedRemainingTasks(); }
    public long getMaxSSTableBytes() { return
delegate.getMaxSSTableBytes(); }
    public ScannerList getScanners(Collection<SSTableReader> sstables,
Range<Token> range) { return delegate.getScanners(sstables,range); }
    public ScannerList getScanners(Collection<SSTableReader> sstables,
Collection<Range<Token>> ranges) { return delegate.getScanners(sstables,
ranges);}
    public ScannerList getScanners(Collection<SSTableReader> toCompact) {
return delegate.getScanners(toCompact); }
    protected boolean worthDroppingTombstones(SSTableReader sstable, int
gcBefore) { return delegate.worthDroppingTombstones(sstable,gcBefore); }

    public boolean shouldDefragment() { return delegate.shouldDefragment();
}
    public synchronized void replaceSSTables(Collection<SSTableReader>
removed, Collection<SSTableReader> added) {
delegate.replaceSSTables(removed,added); }
    public Collection<Collection<SSTableReader>>
groupSSTablesForAntiCompaction(Collection<SSTableReader> sstablesToGroup) {
delegate.groupSSTablesForAntiCOmpaction(sstablesToGroup); }
    public CompactionLogger.Strategy strategyLogger() { return
delegate.strategyLogger(); }
    public SSTableMultiWriter createSSTableMultiWriter(Descriptor
descriptor,
                                                       long keyCount,
                                                       long repairedAt,
                                                       UUID pendingRepair,
                                                       boolean isTransient,
                                                       MetadataCollector
meta,
                                                       SerializationHeader
header,
                                                       Collection<Index>
indexes,
                                                       LifecycleNewTracker
lifecycleNewTracker) {
        return delefate.createSSTableMultiWriter(descriptor, keyCount,
repairedAt, pendingRepair, isTransient, meta, header, indexes,
lifecycleNewTracker);
    }

    public boolean supportsEarlyOpen() { return
delegate.supportsEarlyOpen(); }




    public String getName() { return getClass().getSimpleName(); } // don't
delegate because this is probably the name used in the column family
definition.




    public synchronized void addSSTable(SSTableReader sstable) {
delegate.addSSTable(sstable); }
    public synchronized void addSSTables(Iterable<SSTableReader> added) {
delegate.addSSTables(added); }

    public synchronized void removeSSTable(SSTableReader sstable) {
delegate.removeSSTable(sstable); }
    public void removeSSTables(Iterable<SSTableReader> removed) {
delegate.removeSSTables(removed); }

    public void metadataChanged(StatsMetadata oldMetadata, SSTableReader
sstable) { delegate.metadataChanges(oldMetadata,sstable); }


    protected Set<SSTableReader> getSSTables() { return
delegate.getSSTables(); }
    public String toString() {return delegate.toString(); }


    public static Map<String, String> validateOptions(Map<String, String>
options) throws ConfigurationException { return
delegate.validateOptions(options); }

}

On Fri, Sep 27, 2019 at 11:58 AM Carl Mueller <carl.muel...@smartthings.com>
wrote:

> Is this still the official answer on TWCS 2.X --> 3.X upgrades? Pull the
> code and recompile as a different package?
>
> Can I just declare the necessary class and package namespace and delegate
> to the actual main-codebase class?
>
>
> On Mon, Nov 5, 2018 at 1:41 AM Oleksandr Shulgin <
> oleksandr.shul...@zalando.de> wrote:
>
>> On Sat, Nov 3, 2018 at 1:13 AM Brian Spindler <brian.spind...@gmail.com>
>> wrote:
>>
>>> That wasn't horrible at all.  After testing, provided all goes well I
>>> can submit this back to the main TWCS repo if you think it's worth it.
>>>
>>> Either way do you mind just reviewing briefly for obvious mistakes?
>>>
>>>
>>> https://github.com/bspindler/twcs/commit/7ba388dbf41b1c9dc1b70661ad69273b258139da
>>>
>>
>> About almost a year ago we were migrating from 2.1 to 3.0 and we figured
>> out that Jeff's master branch didn't compile with 3.0, but the change to
>> get it running was really minimal:
>>
>> https://github.com/a1exsh/twcs/commit/10ee91c6f409aa249c8d439f7670d8b997ab0869
>>
>> So we built that jar, added it to the packaged 3.0 and we were good to
>> go.  Maybe you might want to consider migrating in two steps: 2.1 -> 3.0,
>> ALTER TABLE, upgradesstables, 3.0 -> 3.1.
>>
>> And huge thanks to Jeff for coming up with TWCS in the first place! :-)
>>
>> Cheers,
>> --
>> Alex
>>
>>

Reply via email to