001/*
002 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved.
003 *
004 * Project and contact information: http://www.cascading.org/
005 *
006 * This file is part of the Cascading project.
007 *
008 * Licensed under the Apache License, Version 2.0 (the "License");
009 * you may not use this file except in compliance with the License.
010 * You may obtain a copy of the License at
011 *
012 *     http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing, software
015 * distributed under the License is distributed on an "AS IS" BASIS,
016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017 * See the License for the specific language governing permissions and
018 * limitations under the License.
019 */
020
021package cascading.tuple.collect;
022
023import cascading.tuple.Tuple;
024import org.slf4j.Logger;
025import org.slf4j.LoggerFactory;
026
027/**
028 *
029 */
030public interface Spillable
031  {
032  interface SpillStrategy
033    {
034    boolean doSpill( Spillable spillable, int size );
035
036    String getSpillReason( Spillable spillable );
037    }
038
039  interface SpillListener
040    {
041    SpillListener NULL = new SpillListener()
042    {
043    private final Logger LOG = LoggerFactory.getLogger( SpillListener.class );
044
045    @Override
046    public void notifyWriteSpillBegin( Spillable spillable, int spillSize, String spillReason )
047      {
048      LOG.info( "spilling {} tuples in list to spill number {}", spillSize, spillable.spillCount() + 1 );
049      }
050
051    @Override
052    public void notifyReadSpillBegin( Spillable spillable )
053      {
054      }
055
056    @Override
057    public void notifyWriteSpillEnd( SpillableTupleList spillableTupleList, long duration )
058      {
059      }
060    };
061
062    void notifyWriteSpillBegin( Spillable spillable, int spillSize, String spillReason );
063
064    void notifyWriteSpillEnd( SpillableTupleList spillableTupleList, long duration );
065
066    void notifyReadSpillBegin( Spillable spillable );
067    }
068
069  void setGrouping( Tuple group );
070
071  Tuple getGrouping();
072
073  void setSpillStrategy( SpillStrategy spillStrategy );
074
075  void setSpillListener( SpillListener spillListener );
076
077  /**
078   * The number of times this container has spilled data to disk.
079   *
080   * @return in int
081   */
082  int spillCount();
083  }