You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by ka...@apache.org on 2017/04/05 22:33:57 UTC

[01/14] storm git commit: STORM-2416 Release Packaging Improvements

Repository: storm
Updated Branches:
  refs/heads/master c4170ab16 -> e84b39d1e


http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/sampledata/randomwords.txt
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/sampledata/randomwords.txt b/storm-perf/src/main/sampledata/randomwords.txt
deleted file mode 100644
index 1b800cf..0000000
--- a/storm-perf/src/main/sampledata/randomwords.txt
+++ /dev/null
@@ -1,14049 +0,0 @@
-Hester starosta Bassaris guanajuatite pinulus debromination 	
-outhue pamphlet Socraticism tomorrowness masa Bertat Vichyite 	
-epauliere magnificently Mormyrus circumzenithal sapphiric Homoiousian misthread 	
-Pithecolobium saguran hemimelus epauliere symbiogenetically 	
-chronist cervisial euphemious topline sandbox pneumonalgia Babylonism sawdust by 	
-figured impressor theologicopolitical scrat arsenide cockal roughcast introducer playfellowship 	
-potentness Tsonecan ovopyriform inertly Bertat acocotl whitlowwort 	
-Gothish Pishquow corona interruptedness glossing molecule preagitate 	
-seelful unscourged swangy Mycogone bogydom nummi homotransplant unburnt 	
-guitarist cockal Coniferae cylindric ovopyriform nonmanufacture monilioid hypochondriacism 	
-underogating impairment genii Ludgatian palaeotheriodont marten 	
-euphonym zoonitic cervisial Bertat guanajuatite Vaishnavism nonsuppressed subsequentially 	
-scotale semiangle epididymitis bestill nonutilitarian lifter pyrocatechol obolus 	
-scrat unpremonished ungrave undeterring winterproof zanyism Itea tonsure 	
-antideflation rivethead seeingness snare refasten repealableness monstership bacillite 	
-biodynamics antiadiaphorist strander undangered Hester 	
-overwoven fallacious yawler seelful helminthagogic 	
-quad putative whittle placatory vinny nebular sialadenitis 	
-epauliere elemicin greave relaster pyroacetic nectopod nonexecutive weism dunkadoo 	
-sarcologist tetragynian cubit frictionlessly magnetooptics undangered glyphography vinny 	
-bladderwort unobservantness unswanlike terrestrially botchedly ultraobscure 	
-papery mesymnion embryotic Bulanda pumpkinification Bassaris cromlech ungrave 	
-Semecarpus commotion familist uncontradictableness manny vinny 	
-eurythermal enation oratorship cretaceous hypoid 	
-biopsic yote ineunt subangulated mutter barkometer 	
-manny signifier brag heavenful Homoiousian undeterring michigan 	
-ultratense Protestantize angina zenick swearingly unexplicit 	
-monstership unrepealably shibuichi enhedge pachydermous bozal rechar lineamental 	
-thermochemically nonutilitarian uninterpleaded Florissant ineunt jharal aneurism stachyuraceous 	
-neuromimesis reperuse magnificently scyphostoma manganosiderite 	
-merciful becomma unrealize Vaishnavism superindifference trillium soorkee rechar 	
-lienteria Orbitolina Protestantize Gothish molossic nonsuppressed nonutilitarian 	
-cyanoguanidine feasibleness unstipulated thermoresistant slait Inger characinoid 	
-transudatory seizing ungreat almud monander abstractionism socioromantic 	
-sequestrum sequestrum widdle angina bacillite 	
-tum beatable seraphism bozal cattimandoo skyshine sombreroed emir 	
-circular strander diplomatize veterinarian inertly prolificy prepavement 	
-taver sequestrum corbel classificational mangonism strander swacking 	
-unrevolting Sebastian spiranthic hepatorrhaphy oflete subangulated subtransverse 	
-unharmed myesthesia trophonema bozal immatchable 	
-uninhabitedness eristically Eryon allegedly daytime periclitation phallaceous 	
-phytonic yote Serrifera nonmanufacture Animalivora 	
-bozal gunshop ornithodelphous Tamil chorograph Quakerishly outwealth laryngic hepatorrhaphy 	
-pinulus uninhabitedness endotheliomyoma unachievable Confervales ladhood chilblain 	
-unachievable nonmanufacture rave Prosobranchiata dermorhynchous minniebush oinomancy overinstruct ventricous 	
-precostal ununiformly mastication figured idiotize antihero 	
-Kenipsim beneficent blurredness Dawsonia twinling phallaceous impugnation dermorhynchous 	
-packsack zanyism breadwinner Megaluridae uncarefully zenick dishpan squdge 	
-dialoguer theologicopolitical subfoliar mangonism mustafina champer 	
-Consolamentum exploiter imperceptivity nectopod breadwinner floatability 	
-heavenful theologicopolitical pyrocatechol ferrogoslarite infestation dermorhynchous lampyrine 	
-shallowish crystallographical uninhabitedness cocksuredom yawler hysterolysis genii bromic 	
-antalgol chronographic chasmy proboscidiform craglike stiffish 	
-marshiness Scanic adz uninterpleaded trailmaking stormy impairment Dunlop pinulus 	
-mechanist helminthagogic semantician ununiformly incomprehensible equiconvex adatom transcorporeal sertularian 	
-migrainoid bacillite wandoo sapience counteralliance preparative unpeople aurothiosulphuric 	
-deindividualization astucious rede schoolmasterism boor alveolite bogydom unaccessible tendomucoid 	
-glyphography antihero furacious centrifugalization eurythermal atlantite counteractively metaphonical 	
-Hydrangea spermaphyte canicule impugnation meloplasty introducer 	
-lithotresis Effie saccharogenic arsenide porencephalous speckedness 	
-bought patroller uvanite unevoked basto dehairer bought 	
-posterishness overstaid exploiter mesymnion angina oratorize winterproof Ochnaceae iniquitously 	
-jharal gallybeggar marshiness subdentate twinling redecrease ramosopalmate 	
-chronist underskin wandoo diurnalness haply helpless chilblain unforkedness 	
-epididymitis archesporial uncompromisingly mesymnion karyological yawler 	
-ventricous horsefly bespin autobiographist deaf Lemuridae Caphtor misexposition 	
-abscission masa scyphostoma pentafid nonlustrous lebensraum 	
-posttraumatic uninductive sloped transude enation lithograph pachydermous papery 	
-weism proacquittal greave Scorpaenidae arrowworm 	
-velaric doubtingness Swaziland unstressedly coracomandibular 	
-iniquitously suspend relaster dunkadoo Glecoma larklike uncompromisingly unscourged 	
-macropterous reappreciate countergabion immatchable ovopyriform Russifier thiodiazole rizzomed sequacity 	
-neuromimesis balladmonger bladderwort furacious nonpoisonous tetchy pumpkinification laryngic Effie 	
-opacousness cacuminal unleavened lithotresis metaphonical antideflation feasibleness subfebrile 	
-underskin unpatched Gothish stradametrical yeat 	
-Dawsonia counteractively merciful doubtingness Spencerism havoc involatile precostal 	
-Mormyrus calabazilla tomorn valvula glandularly supraoesophageal ungrave 	
-overstaid throbless lampyrine phallaceous experientialist blurredness okonite 	
-subdrainage periarthritis unrepealably enation pansophism 	
-helminthagogic digitule quarried metastoma molecule Uraniidae harr mediateness slipped 	
-Aktistetae diminutively cresylite antihero spiciferous ascitic 	
-dehairer mangonism Lincolnlike prescriber templar 	
-Ophiosaurus plerome tantivy diplomatize squdge venialness 	
-imprescribable angiolymphoma seeingness exprobratory Glecoma mechanist avengeful diopside uncontradictableness 	
-decidable parodist unexplicit physiologian Munychian parabolicness propheticism 	
-homotransplant reperuse antiabolitionist sialadenitis plerome Dunlop uncontradictableness 	
-pachydermous preoral chargeably sterilely aneurism cubby yeelaman 	
-migrainoid totaquina benthonic centrifugalization pyroacetic nonutilitarian corona 	
-interruptor diatomaceous oxyterpene beneficent returnability molecule 	
-tantivy comism misthread cubby cretaceous ungrave 	
-eristically waird overcontribute totaquina proboscidiform tramplike 	
-counteralliance ungreat unchatteled bucketer bespin parastas defensibly chasmy 	
-calabazilla cubit synovial bacterioblast neurodegenerative apopenptic asparaginic 	
-inductivity undinted thermochemically antiabolitionist pendulant 	
-pachydermous tum Pishquow inertly ventricous 	
-manganosiderite skyshine Bishareen tailoress transcortical homeotypical glacierist 	
-devilwise enhedge pendulant cervisial preagitate yote eucalypteol cornberry clanned 	
-subfoliar impairment bromic Eryon centrifugalization mericarp folious 	
-dithery exploiter liquidity imaginary bismuthiferous archididascalian monstership eer 	
-astucious triradiated uncontradictableness pneumatotherapy overstudiousness fetlocked counteralliance Aplacentalia 	
-ticktick antideflation larklike Macraucheniidae nonlustrous Confervales nonlustrous antideflation 	
-extraorganismal apopenptic subdentate pachydermous metastoma abusiveness 	
-Zuludom insatiately Passiflorales oinomancy antideflation fetlocked Consolamentum 	
-dishpan cromlech sapphiric putative unreprimanded cumbrousness lifter agglomeratic karyological 	
-laubanite Cephalodiscus Zuludom unbashfulness obispo tonsure incalculable 	
-periclitation approbation imperceptivity sequentially wingable 	
-arsenide feasibleness spiciferous choralcelo manilla undinted Jerusalem goladar stewardship 	
-Bulanda visceral orthopedical antideflation epauliere codisjunct poleax kerykeion 	
-by misexposition benzothiofuran macropterous gallybeggar sviatonosite 	
-heliocentricism unpeople unlapsing chorograph transcortical unlapsing 	
-sawdust byroad iniquitously omega subfoliar ethnocracy jajman aprosopia 	
-Hester foursquare Helvidian diwata reformatory putative louse unscourged 	
-Quakerishly prolificy avengeful commotion temporomastoid 	
-cacuminal hypochondriacism cornberry brooky terrificness iniquitously undeterring 	
-terrestrially seelful parabolicness benzoperoxide approbation 	
-Machiavel subangulated overcrown yeat involatile 	
-nummi stachyuraceous Mormyrus lebensraum chronist subfebrile barkometer 	
-unpredict meloplasty characinoid hemimelus velaric aconitine figureheadship 	
-impugnation sturdied Hester alen zanyism consumptional 	
-horsefly enhedge projecting tomorrowness eer debromination doubtingness unpatched gemmeous 	
-metrocratic gemmeous uncombable slait papery depressingly 	
-flutist deindividualization scapuloradial perculsive selectivity Spencerism 	
-equiconvex pamphlet cervisial micromembrane paleornithology serosanguineous cuproiodargyrite 	
-reperuse quailberry diopside rivethead meloplasty incomprehensible 	
-sangaree pelvimetry ploration dithery amplexifoliate Ludgatian 	
-flatman enation cubit componental inventurous botchedly 	
-autobiographist flushgate stiffish allectory ambitus triakistetrahedral unprovided chargeably 	
-heavenful parquet equiconvex outwealth Pyrales unpeople diatomaceous canicule 	
-Megaluridae twinling bucketer sertularian metaphrastical 	
-breadwinner imaginary lithotresis selectivity Hysterocarpus Triconodonta steprelationship 	
-uniarticular angiopathy laryngic preagitate synovial scabbardless socioromantic swoony inventurous 	
-Vichyite liquidity bogydom autoschediastical scotale debellator 	
-sequentially omega characinoid unisexuality parodist 	
-cubit Alethea unevoked photoelasticity Ophiosaurus acidophile redesertion 	
-depravity Homoiousian analgize venialness archistome orthopedical quadrennial affaite 	
-technopsychology seeingness ambitus kerykeion abusiveness enterostomy pansophism appetible swearingly 	
-paleornithology Vichyite corelysis affaite sesquiquintile incomprehensible 	
-pompiloid saguran isopelletierin okonite tramplike signifier trip 	
-jharal frenal playfellowship neuromimesis jirble cumbrousness depravity 	
-splenauxe hypoplastral collegian nectopod metrocratic erythremia precostal 	
-brooky gunshop Consolamentum Isokontae Shiah biopsic Savitar sturdied 	
-sangaree sesquiquintile Ochnaceae ungrave whittle 	
-parquet diatomaceous detractive flutist transcorporeal enterostomy 	
-templar decardinalize undecorated parodist noreast sturdied noreast furacious uninductive 	
-regardful unaccessible parabolicness Bishareen peptonate pseudohalogen velaric bacillite componental 	
-impressor antineuritic waird winterproof expiscate 	
-porriginous boser catabaptist pyrocatechol intuition 	
-helpless bubble depressingly taver comism catabaptist 	
-unleavened serosanguineous upcushion Fameuse groundneedle masa rivethead 	
-amplexifoliate thiodiazole apocalypst enterostomy uvanite 	
-catabaptist Aktistetae bladderwort inertly unforkedness Hester socioromantic 	
-uncompromisingness sural piquantness appetible frameable waird diopside tricae 	
-triakistetrahedral semantician aquiline Filipendula heavenful danseuse Tsonecan jajman waird 	
-strander enhedge outwealth epauliere depravity calabazilla 	
-yeat interruptor balanocele homotransplant upswell analgic Uraniidae 	
-Dodecatheon equiconvex adatom knob soorkee cubby shola pleasurehood 	
-unswanlike unpatched overcultured shola shellworker bucketer transude foursquare 	
-tristich pneumonalgia velaric Aplacentalia sheepskin umangite lineamental zenick acidophile 	
-ferrogoslarite ununiformly analgize rehabilitative tambo upswell Scorpaenidae 	
-meriquinoidal yeelaman photoelasticity refasten embryotic guitarist metrocratic 	
-pneumonalgia hackneyed gallybeggar foursquare valvula 	
-preaffiliate diathermacy pyrocatechol brag parodist sandbox agglomeratic prescriptible sturdied 	
-disilane ell scapuloradial havoc inferent sandbox galbulus Pithecolobium erythrodextrin 	
-interfraternal masa whittle expiscate brutism oinomancy bucketer depravity 	
-antideflation swacking cuproiodargyrite jajman Macraucheniidae temporomastoid 	
-decardinalize louse coracomandibular bunghole velaric emir tambo Russifier trisilicic 	
-classificational trillion diplomatize uncontradictableness subangulated arrowworm hemimelus marshiness penult 	
-adz thermanesthesia Munnopsidae paranephros emir basto choralcelo Bulanda 	
-autobiographist kerykeion symbiogenetically repealableness stroking stradametrical 	
-overbuilt periclitation Pincian nonsuppressed warlike helpless 	
-ineunt tramplike corona bucketer corona 	
-superindifference pictorially aneurism chrysochrous comism jirble percent arsenide 	
-Tamil vesperal bought pseudoxanthine danseuse unlapsing 	
-sapphiric Mesua starosta wandoo antalgol kerykeion 	
-raphis Dictograph unswanlike larklike hondo slangy subfebrile cuproiodargyrite 	
-dispermy okonite circular terrestrially componental chrysochrous stronghearted sandbox adz 	
-hepatorrhaphy superindifference inventurous tonsure wherefrom Orbitolina codisjunct 	
-experientialist preagitate metoxazine mesymnion diwata regardful prolificy 	
-diminutively heavenful octogynous unrevolting nonsuppressed 	
-archistome idiotize sterilely neurodegenerative evictor 	
-Sphenodontidae swearingly monilioid squit nonuple flatman 	
-pentosuria strammel fossilism parastas characinoid 	
-trillion semiangle hymnic trillium subsequentially ell cyanophilous farrantly balladmonger 	
-sapphiric vesperal ethmopalatal dehairer intrabred Pyrales Homoiousian 	
-louse ungrave ascitic bestill topline 	
-potentness thorite repealableness antalgol pompiloid overcontribute orthopedical valvula 	
-feasibleness Pincian appetible preoral ten Hysterocarpus Orbitolina undangered 	
-erlking ornithodelphous bromate starer ventricous flutist Harpa folious 	
-elastivity oversand heavenful ladhood eucalypteol havoc Fouquieria dosseret chooser 	
-mutter reappreciate topsail heavenful archididascalian 	
-spermaphyte untongued upcushion naught clanned 	
-chilblain metrocratic jajman astucious chargeably beatable 	
-nonpoisonous idiotize groundneedle ultraobscure dastardliness interfraternal giantly 	
-sural spiciferous intuition lophotrichic pope mastication jharal chronist 	
-circular twinling sud bestill trunnel proauction 	
-paunchy pansophism overbuilt stroking electrotechnics 	
-meriquinoidal leucophoenicite socioromantic impairment nummi 	
-yeelaman spot pachydermous bot theologicopolitical pelvimetry unaccessible sloped 	
-oxyterpene instructiveness trophonema nonexecutive critically decidable 	
-ascitic paradisean corelysis noreast seeingness arduousness acocotl friarhood becomma 	
-iniquitously cervisial octogynous inductivity Edo 	
-Thraupidae Russifier prolificy stronghearted ununiformly 	
-visceral visceral involatile introducer hyocholic 	
-noncrystallized angiopathy preoral unpredict marshiness 	
-Mycogone immatchable bogydom palaeotheriodont diathermacy laurinoxylon stroking saccharogenic arsenide 	
-retinize Christianopaganism cacuminal cloy atlantite becomma vesperal nonpoisonous stentorophonic 	
-canicule tum constitutor authorling antihero superindifference 	
-toplike flatman bot saccharogenic swearingly 	
-unlapsing docimastical arval laryngic characinoid technopsychology weism 	
-Pishquow balladmonger coracomandibular glyphography merciful tingly Caphtor ungrave 	
-leucophoenicite Effie prepavement angiolymphoma Confervales weism 	
-decardinalize manilla endotheliomyoma Dawsonia japanned scrubbed unevoked boor 	
-mangonism vinny plugger thiodiazole immatchable Spencerism seelful 	
-warlike vinny pondside pondside Bermudian inventurous unurban pachydermous oratorship 	
-pseudoxanthine ethnocracy theologal meriquinoidal saccharogenic sialadenitis tetrahedral pyxie 	
-synovial predisputant ten unprovided Saponaria seeingness toplike 	
-pondside fallacious enation valvula noreast bathysphere infestation 	
-mammonish gymnastic deepmost widdle atlantite antivenin 	
-Munnopsidae dunkadoo overstaid redescend uncombable foursquare thermoresistant gymnastic 	
-introducer laurinoxylon decardinalize Joachimite cylindric subsequentially 	
-orthopedical relaster generalizable trophonema coadvice eristically Vaishnavism 	
-rosaniline Thraupidae monilioid extraorganismal predebit hypochondriacism marten mericarp 	
-biventer undiffusive pendulant transcortical sombreroed cumbrousness pinulus ovoviviparous 	
-asparaginic Machiavel lithograph parmelioid unleavened 	
-warlike overcontribute Helvidian aurothiosulphuric dinical gallybeggar pamphlet swoony 	
-coldfinch percent paleornithology Protestantize diwata 	
-imaginary aurothiosulphuric cervisial prescriber rizzomed skyshine Socraticism Cimmerianism seelful 	
-parquet poleax unevoked coadvice repealableness Munychian endotheliomyoma apopenptic eucalypteol 	
-quintette pneumatotherapy ornithodelphous sirrah hoove 	
-nonuple Swaziland planosubulate bromic potentness skyshine eulogization 	
-smokefarthings stormy ineunt nonexecutive Ophiosaurus greave bonze raphis boser 	
-elemicin ell hackneyed Haversian tomorrowness nonsuppressed embryotic daytime boser 	
-heliocentricism antiscolic gelatinousness scrubbed overstudiousness lifter periclitation 	
-tingly shellworker aneurism prospectiveness unefficient uninductive Spatangoidea culm 	
-taurocolla adscendent inexistency quarried trabecular oratorship 	
-vitally topsail raphis parastas eristically chordacentrum 	
-Lincolnlike cornberry mammonish mesophyte overcrown quadrennial swacking mendacity macropterous 	
-Tamil diopside pneumatotherapy comprovincial uncontradictableness Mormyrus 	
-uninterpleaded starosta rosaniline triradiated prolificy 	
-aquiline waird saccharogenic pachydermous Macraucheniidae neurodegenerative speckedness overcrown 	
-infrastapedial percent thermanesthesia ticktick periclitation sequacity 	
-agglomeratic centrifugalization unaccessible gelatinousness angiolymphoma Pithecolobium reeveland unfurbelowed beadroll 	
-culm unrevolting theologicopolitical soorkee gemmeous avengeful 	
-marten deindividualization bathysphere bettermost saccharogenic Passiflorales seditious mendacity erlking 	
-bromate deepmost stachyuraceous characinoid floatability obolus 	
-overcultured triradiated oblongly adatom stronghearted patroller Jerusalem 	
-commotion cheesecutter semiangle uninterpleaded monander danseuse 	
-bromate scyphostoma reeveland doina commotion parquet tonsure 	
-antiadiaphorist Swaziland twinling stiffish exploiter 	
-arrowworm uncontradictableness furacious pomiferous Harpa pope 	
-yeat deindividualization monander wandoo subangulated Filipendula oxyterpene prepavement Christianopaganism 	
-benzoperoxide Bushongo slangy larklike overstudiousness pentosuria unfulminated 	
-mangonism mangonism overstudiousness bogydom ungrave oxyterpene repealableness 	
-instructiveness balladmonger cattimandoo karyological magnetooptics misthread 	
-roughcast theologal bucketer angiopathy theologicopolitical 	
-spot seminonflammable hondo Eleusinian metaphonical elastivity predisputant 	
-pentafid eer tailoress pictorially phlogisticate ploration nummi thiodiazole Joachimite 	
-slait unstressedly bucketer Spencerism outguess tingly chasmy 	
-depravity unscourged corona Gothish allegedly frenal 	
-interruptor benzoperoxide mammonish slipped immatchable 	
-impairment havoc plugger intuition equiconvex interruptedness guitarist diatomaceous dinical 	
-constitutor Protestantize circular edificator sequestrum hogmace 	
-reciprocation saguran Arneb cacuminal arval prepavement eulogization 	
-toxihaemia seelful frameable Swaziland counteractively bacillite 	
-gelatinousness uncombable sonable seraphism thorite byroad 	
-oversand authorling umangite tartrous verbid 	
-beneficent neurodegenerative toplike scyphostoma perculsive 	
-airfreighter Alethea bucketer tonsure Confervales 	
-feasibleness omega flatman throbless tomorn returnability diatomaceous 	
-balladmonger epidymides sirrah terrificness disilane unurban 	
-Confervales involatile overcultured astronomize Munnopsidae chrysochrous foursquare 	
-seraphism preagitate helminthagogic benzoperoxide Glecoma Yannigan umangite veterinarian subofficer 	
-overcultured airfreighter jirble thiodiazole stradametrical ipomoein cuproiodargyrite templar ambitus 	
-umbellic toxihaemia Llandovery apopenptic jajman pope doubtingness pleasurehood Coniferae 	
-abthainry Vaishnavism patroller verbid terrificness 	
-apopenptic stewardship precostal Yannigan limpet weism Animalivora greave 	
-Munnopsidae proacquittal extraorganismal undeterring drome 	
-apocalypst entame benthonic bettermost proauction photoelasticity 	
-dosseret eucalypteol liquidity scabbiness quintette velaric totaquina 	
-splenauxe deaf asparaginic unefficient Auriculariales Thraupidae relaster harr preparative 	
-pinulus jharal propodiale frameable angiopathy biventer harr 	
-plugger propheticism speckedness Cercosporella slipped hymnic 	
-lineamental strammel Filipendula monstership comprovincial sialadenitis sesquiquintile warlike 	
-golem splenauxe dehairer gymnastic imaginary 	
-cocksuredom impairment Uraniidae Uraniidae apocalypst phytonic Auriculariales osteopaedion Florissant 	
-stormy sequentially introducer suspend Ochnaceae nonsuppressed Whilkut bromic antalgol 	
-chronist umbellic speckedness discipular Dunlop sturdied scabbiness 	
-sandbox phlogisticate endotheliomyoma hypoplastral tambo subtransverse 	
-phallaceous pony obispo pony acidophile preparative semiangle depthwise brooky 	
-exprobratory involatile prescriptible counterappellant ovoviviparous 	
-seizing Llandovery seeingness wherefrom liquidity tetrahedral arrendation 	
-emir larklike biventer proacquittal Swaziland unsupercilious Machiavel decidable rainproof 	
-tartrous imperceptivity amylogenesis devilwise reappreciate pondside ultratense pleasurehood periclitation 	
-enterostomy elastivity archesporial antiscolic drome unpremonished strander bladderwort sapphiric 	
-serphoid pope potentness angiolymphoma cromlech photoelasticity 	
-symbiogenetically metrocratic monstership diurnalness eucalypteol laurinoxylon 	
-Orbitolina yawler Shiah metoxazine ovopyriform tricae thermanesthesia 	
-nonexecutive elemicin pleurotropous cocksuredom reformatory knob projecting tomorn 	
-Sebastian sandbox trisilicic nonlustrous morphiomania monilioid guanajuatite strander 	
-ineunt upswell cromlech airfreighter sud liberatress speckedness digitule Serrifera 	
-paradisean sarcologist manny rosaniline ungrave cocksuredom greave 	
-Tsonecan whittle soorkee astronomize peristeropode 	
-karyological rehabilitative pterostigma gala neurotrophic Cimmerianism Aplacentalia collegian clanned 	
-signifier Hysterocarpus projecting patroller Scanic stiffish glossing starosta 	
-parodist deaf diurnalness taurocolla gala goodwill golem undangered zanyism 	
-nonrepetition beadroll spot yeelaman Sebastian circumzenithal Christianopaganism debellator cubby 	
-rebilling omega eer apocalypst aurothiosulphuric proauction imperceptivity cinque chooser 	
-fallacious cubby defensibly pompiloid participatingly archesporial trip defensibly 	
-breadwinner cattimandoo abscission winterproof ultraobscure 	
-isopelletierin Llandovery hysterogen preparative Bermudian 	
-bugre unfulminated redesertion arteriasis frameable cockal Protestantize 	
-calabazilla intuition pope naprapath porriginous Dictograph posttraumatic 	
-japanned arrowworm laurinoxylon eristically defensibly toxoplasmosis pentafid 	
-circumzenithal dastardliness basto Bertat oflete 	
-guanajuatite redecrease experientialist thermochemically molossic 	
-frameable rede Pithecolobium chasmy meriquinoidal regardful 	
-evictor planosubulate testa entame orthopedical 	
-scrat friarhood Spencerism Ghent pomiferous magnificently Triconodonta 	
-reeveland gul omega valvulotomy sloped 	
-lifter spermaphyte dithery experientialist unharmed ungreat seeingness Bertat Dawsonia 	
-aneurism involatile pomiferous homeotypical archistome 	
-overwoven anta stradametrical countergabion Aktistetae unsupercilious benzoperoxide 	
-Ludgatian Kenipsim bought adz glacierist Christianopaganism 	
-trabecular counterappellant outguess kerykeion counteractively Endomycetaceae exploiter 	
-inventurous bettermost undiffusive nummi bespin 	
-goladar macropterous clanned pinulus dipsomaniacal 	
-frontoorbital analgic oblongly feasibleness Hester 	
-laubanite dosseret phoenicochroite redecrease ungreat nonexecutive lyrebird redecrease 	
-refasten airfreighter myesthesia heavenful whitlowwort depressingly scrat Aplacentalia antiscolic 	
-testa aneurism cornberry Semecarpus Passiflorales 	
-counteractively cromlech osteopaedion engrain uloid metopon euphemious metapolitics 	
-cromlech chorograph tum undinted wherefrom nebular 	
-Dictograph stronghearted Yannigan paradisean rebilling photoelasticity 	
-physiologian scapuloradial interruptor unforkedness intuition 	
-pachydermous eurythermal hondo chalcites outguess 	
-bromic blurredness familist erythrodextrin bought ramosopalmate 	
-returnability rivethead chasmy Arneb phoenicochroite oblongly 	
-undeterring bozal counterappellant pictorially Pishquow 	
-templar valvulotomy nummi valvulotomy Homoiousian limpet unschematized 	
-brooky rotular proacquittal predebit componental thermochemically 	
-rivethead lampyrine unsupercilious brooky ell coadvice Harpa 	
-biopsic sesquiquintile coldfinch isopelletierin ultratense tickleproof propheticism misexposition 	
-embryotic docimastical beadroll cubby champer groundneedle archistome devilwise autobiographist 	
-generalizable Machiavel unpatched licitness abthainry vinegarish 	
-Endomycetaceae characinoid atlantite elastivity Dawsonia mericarp stewardship dermorhynchous horsefly 	
-Sphenodontidae dishpan farrantly almud glossing 	
-archesporial monogoneutic upswell scrubbed opacousness drome lampyrine Ochnaceae 	
-quad trillium veterinarian circumzenithal hypoid 	
-choralcelo beneficent pamphlet epauliere lyrebird impairment 	
-uncombable oratorship nonprofession osteopaedion Harpa 	
-unpeople Tamil Pishquow helpless cacuminal 	
-hemimelus omega metaphonical Chiasmodontidae ethmopalatal euphonym totaquina 	
-manilla Scorpaenidae knob saccharogenic bestill tramplike 	
-incomprehensible foursquare constitutor serosanguineous warriorwise brutism 	
-flushgate prolificy spiciferous uncombable glossing 	
-Inger deaf Aktistetae frenal chooser meriquinoidal hoove Pyrales 	
-blightbird digitule guitarist chargeably Pithecolobium 	
-ungouged Hydrangea veterinarian widdle patroller myesthesia sportswomanship ovopyriform elastivity 	
-overwoven shibuichi volcano quadrennial bestill biventer michigan Aplacentalia bespin 	
-gemmeous pachydermatoid corelysis umangite metoxazine enhedge unpatched 	
-Russifier seizing louse componental morphiomania socioromantic infestation downthrust 	
-affaite unrevolting obolus swoony circular kerykeion sertularian saguran 	
-Uraniidae subtransverse pinulus scrat pumpkinification physiologian cylindric metaphonical masa 	
-tambo pumpkinification Haversian brooky temporomastoid gymnastic octogynous Aktistetae skyshine 	
-mesophyte scrubbed nonlustrous hysterogen seminonflammable volcano chrysochrous zanyism 	
-japanned Eryon uncompromisingness corona sturdied relaster equiconvex agglomeratic undeterring 	
-impressor oratorize outwealth stewardship marshiness pachydermatoid stiffish blurredness bugre 	
-uloid limpet ambitus archididascalian parabolicness leucophoenicite 	
-sombreroed blightbird uncarefully Eryon unrepealably dipsomaniacal overcultured 	
-sedentariness tailoress tantivy ultrasystematic pelvimetry lithotresis rainproof meloplasty cyanoguanidine 	
-authorling archistome parastas Bassaris eternal obolus unisexuality 	
-ramosopalmate prezygapophysial manganosiderite mangonism hellbender volcano oflete 	
-snare saguran chorograph brooky Protestantize cuproiodargyrite experientialist 	
-gymnastic rehabilitative constitutor Pithecolobium signifier bonze Christianopaganism 	
-affaite tomorn bismuthiferous airfreighter hypoid decardinalize boor asparaginic 	
-unharmed pendulant allotropic infravaginal Serrifera hysterogen antiabolitionist mesymnion liquidity 	
-quailberry blurredness chronist diopside spherulitic subdrainage subofficer pompiloid sequestrum 	
-selectivity leucophoenicite serpentinic enation merciful Bishareen thermanesthesia 	
-outwealth scrat knob marten Vichyite byroad endotheliomyoma 	
-neurodegenerative Christianopaganism arrendation dinical plerome 	
-Gothish sapphiric homotransplant manilla counteralliance experientialist hogmace tonsure 	
-unleavened phoenicochroite glossing soorkee unexplicit uncarefully myesthesia shola cumbrousness 	
-tomorrowness inductivity interruptedness golem metoxazine greave gul 	
-warriorwise raphis antalgol monander brooky nonutilitarian slipped veterinarian by 	
-retinize Arneb antalgol Cephalodiscus taver gemmeous 	
-Vaishnavism intrabred smokefarthings Edo tambo tambo scyphostoma folious guanajuatite 	
-Dadaism aprosopia psychofugal thermoresistant undeterring 	
-impairment macropterous trillium cretaceous stiffish astucious piquantness 	
-Megaluridae impugnation neuromimesis Scorpaenidae porriginous 	
-Hysterocarpus sequacity antiscolic corbel scotching tomorn collegian 	
-reconciliable semiangle manilla serphoid Dictograph codisjunct smokefarthings Isokontae 	
-coldfinch triradiated circumzenithal reconciliable farrantly cuproiodargyrite prepavement leucophoenicite 	
-gala becomma mastication reconciliable laurinoxylon provedore 	
-untongued culm hellbender diplomatize japanned 	
-exploiter thorite thorite trisilicic mesymnion undecorated toplike metopon scotching 	
-cattimandoo rainproof reciprocation perfunctory Cephalodiscus generalizable undeterring proboscidiform Isokontae 	
-flatman hemimelus papery valvula playfellowship carposporangial Spatangoidea tomorn 	
-chorograph Confervales Haversian scyphostoma reperuse feasibleness paradisean 	
-seelful subirrigate reappreciate signifier triradiated stachyuraceous pansophism uninductive 	
-countergabion tantivy obolus unreprimanded trunnel genii 	
-diatomaceous jajman Vichyite pumpkinification neurotrophic 	
-planispheric groundneedle hackneyed parabolicness frontoorbital 	
-taurocolla brutism sloped dermorhynchous imprescribable 	
-lammy insatiately unlapsing countergabion neuromimesis 	
-golem projecting ungouged Zuludom oxyterpene thermochemically throbless projecting 	
-infestation rave silicize Alethea peptonate 	
-unaccessible Sebastian Hydrangea debromination tartrous Oryzorictinae 	
-subangulated characinoid valvula Prosobranchiata omega experientialist tartrous 	
-Orbitolina inventurous phoenicochroite Quakerishly Haversian basto 	
-angiolymphoma swearingly autoschediastical merciful Coniferae parodist 	
-constitutor overcultured diurnalness expiscate undiffusive moodishness tonsure Munychian 	
-tendomucoid ethmopalatal spookdom hogmace idiotize 	
-bromic weism carposporangial imprescribable orthopedical ultrasystematic sesquiquintile 	
-perculsive metaphonical byroad unrepealably disilane taurocolla prescriber wingable pony 	
-angina uniarticular decidable uniarticular figured calycular 	
-canicule unpredict tailoress scrubbed admissory 	
-yote oversand agglomeratic proauction allegedly chacona 	
-larklike swoony macropterous diopside Eryon spiciferous pentafid 	
-spiranthic unfeeble Protestantize hellbender ell knob pamphlet 	
-unpeople unurban Uraniidae inertly proacquittal seeingness 	
-debellator trabecular hoove pneumatotherapy Arneb atlantite 	
-perculsive intrabred pneumatotherapy infravaginal ineunt reperuse 	
-valvulotomy autoschediastical homeotypical nebular infrastapedial angiolymphoma percent 	
-ineunt coadvice Tamil ell autobiographist prefatorial 	
-pamphlet mammonish unforkedness qualminess peristeropode upswell 	
-paranephros proacquittal danseuse upcushion stroking 	
-larklike interfraternal rede paunchy metaphrastical pamphlet 	
-quadrennial perfunctory upswell kenno prescriber Itea crystallographical Gothish 	
-enhedge chacona calycular dialoguer underskin subangulated Triphora antineuritic 	
-sonable bismuthiferous ovoviviparous unstipulated predebit 	
-meriquinoidal aurothiosulphuric reconciliable testa stroking temporomastoid 	
-golem semantician massedly preagitate concretion sturdied centrifugalization subdentate clanned 	
-scrat plerome Aplacentalia warlike rosaniline terrificness 	
-repealableness sural omega piquantness uninductive liquidity sleigher subfebrile 	
-unpremonished subfebrile lienteria laubanite Bertat valvulotomy sturdied 	
-nonrepetition cresylite nectopod opacousness apocalypst unpeople 	
-propheticism retinize pachydermatoid obispo familist bettermost mechanist repealableness technopsychology 	
-phytonic posttraumatic biventer supraoesophageal transudatory 	
-larklike nonprofession instructiveness culm Chiasmodontidae culm greave endotheliomyoma ultraobscure 	
-autobiographist wingable poleax reappreciate tambo balladmonger louse ethmopalatal 	
-monander archididascalian meriquinoidal undiffusive spiranthic gunshop ultraobscure Hu 	
-figured perfunctory Yannigan preaffiliate eurythermal Florissant umbellic extraorganismal 	
-roughcast Vaishnavism patroller playfellowship acidophile balanocele brag Ghent cyanoguanidine 	
-centrifugalization playfellowship pompiloid blightbird hypochondriacism 	
-photoelasticity pyxie tambo paranephros times deepmost 	
-nebular minniebush unaccessible squit excerpt refective 	
-incalculable Llandovery mesymnion comprovincial socioromantic reperuse Pishquow uloid molossic 	
-winterproof redescend obolus galbulus subdentate 	
-circular starosta unrealize Pyrales stentorophonic 	
-trailmaking asparaginic templar instructiveness diopside misexposition misexposition 	
-prescriptible exploiter autobiographist culm abscission goladar japanned porencephalous Haversian 	
-biventer weism anta Gothish phoenicochroite 	
-frontoorbital quarried saccharogenic Fouquieria unimmortal Lincolnlike 	
-orthopedical asparaginic yawler pinulus unswanlike adatom 	
-idiotize unbashfulness toxoplasmosis champer unchatteled inferent 	
-nonrepetition metoxazine speckedness lifter pyroacetic hyocholic reformatory cyanoguanidine cretaceous 	
-Zuludom scotale unsupercilious appetible omega seraphism 	
-cumbrousness pachydermous Sphenodontidae Confervales retinize putative Christianopaganism unanatomized 	
-squdge diurnalness louse lammy scrubbed 	
-cumbrousness intuition incalculable parabolicness parmelioid pentagamist 	
-prescriber cheesecutter frontoorbital psychofugal parabolicness overstaid ineunt quadrennial gymnastic 	
-tailoress haply stroking provedore corbel parabolicness mendacity balanocele proacquittal 	
-trip tristich Hester metopon cretaceous pelvimetry noreast Quakerishly tambo 	
-pseudoxanthine spot seizing reformatory Spatangoidea Vaishnavism pleasurehood spiciferous 	
-overstaid velaric Megaluridae Triconodonta subdrainage flatman 	
-uncarefully glacierist botchedly orgiastic shola throbless 	
-noncrystallized nigh golem ell impressor benthonic 	
-subtransverse unleavened folious homeotypical dunkadoo oblongly 	
-reperuse diatomaceous unefficient marten farrantly sandbox 	
-Triconodonta rechar totaquina toplike Isokontae overstudiousness rebilling detractive 	
-leucophoenicite abstractionism lithotresis balanocele sedentariness sonable 	
-insatiately columniform Consolamentum aprosopia abscission ordinant cyanophilous centrifugalization 	
-pseudohalogen cockal furacious antideflation pyroacetic quad 	
-electrotechnics immatchable silverhead seizing adscendent 	
-exploiter amylogenesis ungrave counteralliance planispheric 	
-amylogenesis unpremonished wingable templar toxoplasmosis blightbird 	
-shallowish acidophile Bertat superindifference Endomycetaceae squdge sirrah 	
-eucalypteol silicize bought mangonism potentness reappreciate fossilism 	
-mangonism nigh Filipendula cretaceous oflete pope unevoked 	
-Bulanda hepatorrhaphy rede doina limpet erythrodextrin pterostigma pamphlet stereotypography 	
-upswell sportswomanship tristich stachyuraceous quintette endotheliomyoma chooser noreast 	
-spherulitic interruptor galbulus scrat hysterogen wandoo ventricous sandbox 	
-infrastapedial choralcelo overwoven relaster Uraniidae flippantness undiffusive suspend 	
-doubtingness silverhead bespin swoony generalizable consumptional 	
-defensibly prepavement tristich glandularly ineunt charioteer yeelaman 	
-omniscribent parmelioid archesporial slait oratorize toplike bacillite 	
-entame redescend Chiasmodontidae terrificness temporomastoid calycular deaf socioromantic 	
-bicorporeal metaphonical tambo Spatangoidea transcorporeal barkometer amender insatiately Lemuridae 	
-Tsonecan craglike counterappellant Dodecatheon unprovided euphemize 	
-yeelaman by stiffish adz mericarp knob autoschediastical redescend rave 	
-mendacity porriginous metoxazine minniebush devilwise bettermost Dictograph abthainry archesporial 	
-commotion homotransplant comprovincial ambitus unscourged mastication lophotrichic 	
-rizzomed Hydrangea placatory arrendation brag antideflation eulogization 	
-exprobratory eurythermal hyocholic Yannigan parodist prefatorial 	
-docimastical overcontribute electrotechnics sombreroed inductivity scotale testa chacona retinize 	
-Orbitolina acocotl enterostomy electrotechnics pope 	
-noreast toxoplasmosis Inger docimastical metastoma antiadiaphorist 	
-licitness weism veterinarian licitness homotransplant larklike Bassaris Aplacentalia 	
-pterostigma aconitine aurothiosulphuric diopside Eleusinian Aktistetae isopelletierin 	
-venialness ungouged yeat knob arrendation naprapath edificator uncontradictableness pachydermous 	
-docimastical monogoneutic antineuritic sialadenitis cobeliever sedentariness 	
-glacierist Pithecolobium avengeful meloplasty widdle cartful posttraumatic lyrebird 	
-Animalivora involatile leucophoenicite Joachimite antideflation phallaceous Consolamentum overcontribute glacierist 	
-pseudoxanthine pseudohalogen parastas bathysphere roughcast almud hysterogen 	
-balanocele precostal adz hackneyed umbellic stroking starosta 	
-vesperal elemicin supermarket sequacity provedore Florissant euphemize pachydermatoid 	
-pony leucophoenicite piquantness infrastapedial retinize triradiated Caphtor Helvidian corona 	
-pyxie unfeeble Yannigan slipped provedore figured selectivity dipsomaniacal Pincian 	
-subofficer sequentially constitutor masa laryngic genii supermarket floatability 	
-critically goodwill goladar Fameuse balladmonger 	
-helminthagogic tingly propheticism predisputant tickleproof docimastical homotransplant valvula squit 	
-unpredict chooser sloped lithotresis serosanguineous 	
-raphis precostal electrotechnics deepmost parquet gunshop diplomatize propheticism subfoliar 	
-uniarticular plerome uninhabitedness unevoked genii scrubbed 	
-unanatomized chordacentrum archistome putative nigh Ludgatian 	
-sapphiric concretion subtransverse sural arval laurinoxylon agglomeratic exprobratory ploration 	
-projecting alen orchiocatabasis ovoviviparous Scorpaenidae 	
-angiolymphoma rave Dawsonia entame terrificness undecorated yote okonite 	
-Ghent mangonism lampyrine spiranthic absvolt marshiness 	
-tendomucoid interfraternal Tamil bacillite thermochemically predisputant biodynamics mesymnion projecting 	
-visceral diopside archididascalian repealableness rebilling 	
-unaccessible friarhood basto proboscidiform Cephalodiscus rave triradiated overstaid 	
-diatomaceous besagne molecule yeelaman overstaid imprescribable 	
-impairment thermoresistant provedore diplomatize dermorhynchous atlantite adz 	
-steprelationship reeveland boor Sphenodontidae cockstone 	
-redesertion abthainry quarried diatomaceous Dadaism lifter quailberry Coniferae 	
-unfurbelowed pumpkinification parquet vitally benzothiofuran autoschediastical 	
-posttraumatic potentness Gothish bubble oversand glacierist obolus 	
-karyological unobservantness scyphostoma subfebrile lithograph cobeliever biventer 	
-nonpoisonous cervisial flutist cubby glacierist 	
-yeat cresylite Zuludom packsack allegedly laurinoxylon 	
-licitness untongued asparaginic manny hogmace throbless 	
-molecule stroking ungreat Bishareen emir macropterous yeat entame tickleproof 	
-alen unleavened prefatorial spermaphyte Arneb 	
-sviatonosite sud Hu euphonym arval harr 	
-metoxazine catabaptist cacuminal cromlech inertly slangy anta Florissant 	
-figured Machiavel Fouquieria tartrous pachydermous cyanoguanidine perculsive 	
-spermaphyte Dictograph thermoresistant paunchy hyocholic 	
-lammy corona unrealize Eryon impugnation cyanoguanidine cockstone Pithecolobium Joachimite 	
-trillium unfeeble subdrainage strammel liberatress 	
-eristically frameable disilane ornithodelphous orthopedical amender omniscribent 	
-comparability physiologian triakistetrahedral Hydrangea ethmopalatal cubby eulogization topsail 	
-reperuse subdentate preparative Helvidian dosseret Yannigan phallaceous centrifugalization 	
-helpless Savitar bacillite stereotypography counteractively Bertat 	
-jajman psychofugal periclitation experientialist dermorhynchous pictorially atlantite undangered antiadiaphorist 	
-electrotechnics Passiflorales unrevolting pelvimetry danseuse amender 	
-myesthesia pneumatotherapy phytoma nonrepetition refasten jajman Munnopsidae speckedness michigan 	
-tailoress gelatinousness cacuminal Ochnaceae sedentariness reeveland 	
-eristically generalizable taver tomorrowness catabaptist endotheliomyoma terrestrially 	
-Hydrangea tonsure Animalivora charioteer porriginous wingable 	
-aprosopia unefficient sapphiric Lentibulariaceae trillium arteriasis allegedly prescriber 	
-deaf dehairer antiabolitionist focaloid tantivy totaquina tailoress 	
-monander squit extraorganismal classificational Triconodonta brag yote farrantly circular 	
-stentorophonic flippantness atlantite uniarticular zenick Scorpaenidae 	
-vinny testa Pishquow sheepskin osteopaedion Arneb jirble 	
-pompiloid Dodecatheon flippantness unpeople Caphtor overcultured 	
-limpet euphemize vinny seeingness unlapsing stiffish 	
-Llandovery warlike bonze valvula cheesecutter Ophiosaurus eer equiconvex 	
-Edo undeterring diopside Megaluridae octogynous vesperal serpentinic folious Babylonism 	
-unexplicit lifter biopsic culm furacious scabbardless Mesua approbation 	
-antineuritic hackneyed swacking discipular papery authorling tomorrowness orgiastic 	
-zoonitic subirrigate Pishquow Florissant unstressedly Confervales 	
-comprovincial overstaid engrain templar classificational imperceptivity 	
-Machiavel antiadiaphorist Joachimite undecorated hypoid bunghole thorite topline tetragynian 	
-jharal peristeropode triradiated excerpt doina seditious triradiated 	
-pyrocatechol Gilaki hackneyed classificational clanned louse pelf flatman 	
-Cephalodiscus plugger manganosiderite abstractionism scotale starosta fallacious 	
-Thraupidae skyshine throbless heliocentricism brag oratorize clanned parquet arteriasis 	
-ovoviviparous sapience toxihaemia generalizable aprosopia Ghent farrantly genii 	
-Chiasmodontidae diwata arrendation subfebrile hemimelus chasmy vesperal 	
-epidymides canicule pneumonalgia pompiloid acidophile ferrogoslarite weism beneficent 	
-speckedness porriginous tartrous antiscolic manilla patroller sloped 	
-friarhood temporomastoid trisilicic arrowworm pope clanned 	
-molossic intuition bromic airfreighter decardinalize cornberry prescriptible rechar spiranthic 	
-euphemize scrat quintette pansophism vitally brooky coracomandibular seminonflammable 	
-exploiter rizzomed aconitine sapience cumbrousness ascitic unisexuality zenick craglike 	
-approbation saponaceous quarried apopenptic frameable unbashfulness 	
-docimastical astronomize slait periclitation untongued Lentibulariaceae meriquinoidal 	
-Bishareen componental heavenful sonable unprovided proboscidiform 	
-volcano interfraternal thiodiazole Dictograph parodist 	
-sangaree unpeople subirrigate componental countergabion massedly abusiveness 	
-potentness engrain flutist provedore seizing epauliere besagne 	
-prolificy manganosiderite scrat subtransverse zanyism slipped pentosuria 	
-superindifference analgic heavenful perculsive deepmost supraoesophageal diathermacy oratorship 	
-Cephalodiscus toxihaemia astucious nonuple tetchy wemless Edo ambitus nigh 	
-craglike leucophoenicite deindividualization swoony omega antihero swoony unisexuality 	
-reformatory Machiavel danseuse spookdom nonprofession frictionlessly trunnel coadvice unaccessible 	
-Arneb widdle nectopod charioteer bonze antivenin valvulotomy cockal 	
-soorkee trailmaking overcontribute flushgate discipular hysterolysis 	
-counterappellant haply homeotypical ethnocracy floatability corona 	
-disilane generalizable quad sonable Dawsonia tetchy diatomaceous serpentinic mustafina 	
-theologal astucious ethnocracy quintette downthrust pleurotropous inventurous familist 	
-mediateness psychofugal Caphtor mangonism nectopod slait lifter 	
-transude arduousness Hysterocarpus centrifugalization boor refective vesperal abusiveness 	
-morphiomania botchedly sonable counteractively reeveland 	
-inductivity balanocele magnificently Vaishnavism laurinoxylon predebit toxoplasmosis 	
-Gothish visceral larklike Serrifera Ludgatian overcrown horsefly Prosobranchiata discipular 	
-imaginary sapphiric metaphonical trailmaking overcultured 	
-subtransverse monilioid gymnastic reappreciate brutism roughcast Bishareen 	
-slipped countergabion giantly eucalypteol technopsychology orgiastic trophonema 	
-inexistency roughcast approbation ventricous sertularian morphiomania plerome topline frictionlessly 	
-Filipendula rehabilitative undercolored hellbender whitlowwort preaffiliate 	
-brutism lithograph sturdied Christianopaganism coracomandibular scabbardless 	
-antihero ipomoein Zuludom micromembrane downthrust steprelationship tartrous vinny autoschediastical 	
-balanocele sesquiquintile japanned noreast moodishness preagitate 	
-nonprofession divinator vinny provedore upcushion vitally 	
-laubanite chrysochrous unevoked antalgol diminutively unleavened mastication unpredict 	
-trophonema tum chalcites oinomancy ventricous counterappellant 	
-pseudohalogen asparaginic toplike templar airfreighter Lemuridae timbermonger affaite 	
-papery pseudoxanthine manny Semecarpus dishpan vinegarish calabazilla doina putative 	
-velaric schoolmasterism sequestrum molossic sonable 	
-insatiately Muscicapa unexplicit overcontribute monander precostal 	
-piquantness squdge symbiogenetically divinator topsail 	
-antihero gallybeggar hysterogen drome palaeotheriodont unsupercilious 	
-pomiferous Zuludom gorilloid nonpoisonous gemmeous critically 	
-cockstone massedly metastoma cacuminal Socraticism symbiogenetically pneumatotherapy Babylonism 	
-porencephalous appetible scrubbed quailberry ambitus parabolicness phlogisticate 	
-neurotrophic goodwill tetragynian winterproof byroad 	
-Filipendula bunghole parabolicness Florissant cubby pseudohalogen redecrease stormy preparative 	
-unpredict flatman bozal havoc phytoma Alethea flatman visceral 	
-snare velaric bacterioblast chilblain reciprocation 	
-glyphography plugger unanatomized ribaldrous astronomize glacierist 	
-molecule unrealize rechar Fouquieria paradisean 	
-heliocentricism transude counteralliance antineuritic spermaphyte mediateness Pincian characinoid psychofugal 	
-hysterogen exprobratory aurothiosulphuric eer meriquinoidal subdentate tartrous wherefrom scyphostoma 	
-deindividualization manilla entame chalcites Whilkut 	
-atlantite nonprofession dispermy mediateness noncrystallized tomorrowness japanned 	
-craglike redescend tingly feasibleness unisexuality scapuloradial molossic shola waird 	
-unevoked shola serphoid nebular anta chronographic classificational verbid paradisean 	
-ladhood speckedness testa hyocholic bathysphere umangite 	
-trip saguran underogating euphemize generalizable avengeful sloped 	
-superindifference euphemious lifter yote tartrous 	
-drome mediateness Machiavel Yannigan antihero arrowworm 	
-heavenful provedore terrificness uncombable Russifier besagne Harpa ell 	
-lineamental parquet unobservantness bugre homotransplant alveolite mustafina 	
-pamphlet kerykeion Prosobranchiata massedly arsenide 	
-umangite mangonism Gilaki decardinalize heavenful bladderwort overcultured stiffish knob 	
-dastardliness chasmy kenno Dictograph Homoiousian inductivity glossing Haversian dipsomaniacal 	
-Dunlop glacierist Triphora imprescribable reformatory pyxie cretaceous paranephros 	
-parastas jajman overcultured transcortical bespin plerome migrainoid coldfinch 	
-sarcologist analgic dithery Triconodonta consumptional 	
-splenauxe manny crystallographical balanocele Chiasmodontidae 	
-endotheliomyoma winterproof chronographic orchiocatabasis enhedge unleavened hellbender countergabion 	
-unharmed hemimelus unschematized vinegarish sequentially 	
-hymnic impugnation trabecular Gothish undercolored macropterous 	
-hypoid bacterioblast cervisial vinegarish chronist 	
-gorilloid breadwinner abthainry pentosuria smokefarthings poleax paleornithology intrabred 	
-umbellic abthainry overstudiousness stachyuraceous imaginary cloy manilla 	
-hypochondriacism equiconvex tickleproof undecorated spiciferous frameable reformatory 	
-nonprofession technopsychology predebit thermochemically Kenipsim throbless knob depthwise 	
-pomiferous acocotl componental cresylite neuromimesis rechar benthonic Cimmerianism 	
-Thraupidae Serrifera trillion unscourged idiotize 	
-Edo terrificness aspersor subsequentially visceral 	
-dermorhynchous thermoresistant aurothiosulphuric frameable sleigher rotular 	
-uncompromisingness Pithecolobium afterpressure pseudoxanthine allectory chargeably sangaree pictorially glossing 	
-Oryzorictinae trailmaking brooky choralcelo nonlustrous 	
-Vaishnavism antineuritic snare pentosuria manny sterilely Jerusalem 	
-unprovided snare zenick unstressedly counteralliance Semecarpus Triconodonta counteractively 	
-manny slipped manny depthwise porencephalous 	
-Pishquow tomorn prefatorial ultratense antideflation authorling chilblain percent arteriasis 	
-silverhead terrificness allectory ten dermorhynchous ethnocracy 	
-bathysphere periarthritis Munychian benthonic undeterring eucalypteol outwealth wemless Swaziland 	
-experientialist dunkadoo noncrystallized allegedly glyphography pneumatotherapy bunghole toxoplasmosis 	
-thorite angiolymphoma undeterring diurnalness benzoperoxide 	
-chooser poleax totaquina wandoo sturdied paunchy pachydermatoid impugnation 	
-Lemuridae Lincolnlike hackneyed transude uninductive figureheadship Scanic 	
-pentosuria euphonym manny bacillite pyxie Inger helminthagogic 	
-limpet prescriptible Lincolnlike glandularly idiotize untongued vitally jharal unlapsing 	
-Joachimite bromate antivenin redescend folious 	
-plugger sawdust overbuilt refasten metaphonical 	
-twinling omega unobservantness Edo oflete helpless reeveland 	
-authorling twinling warlike eer Christianopaganism tartrous oxyterpene allectory scrat 	
-obolus suspend goodwill cockal inductivity scabbiness 	
-uncompromisingness Bertat overcontribute Cimmerianism tricae 	
-tramplike sarcologist larklike basto depressingly 	
-becomma calabazilla aprosopia Dawsonia pachydermatoid feasibleness 	
-cresylite ferrogoslarite decidable reformatory Triconodonta entame clanned 	
-uncompromisingly biopsic boser unexplicit sawdust noreast Effie veterinarian 	
-kenno halloo Munychian Harpa subangulated pansophism 	
-Filipendula doubtingness abstractionism aurothiosulphuric Bushongo Bulanda 	
-spiranthic Serrifera minniebush participatingly lifter outguess reperuse circumzenithal ultrasystematic 	
-limpet flushgate dastardliness codisjunct outwealth crystallographical tingly coldfinch perfunctory 	
-uncompromisingness dialoguer terrestrially adatom Scanic 	
-metastoma diminutively Swaziland isopelletierin preparative 	
-Hydrangea Caphtor omega scapuloradial pictorially supraoesophageal nonpoisonous elemicin 	
-totaquina trip hysterolysis winterproof Dodecatheon intuition familist 	
-bathysphere Passiflorales nonprofession botchedly eristically sturdied pelf pseudoxanthine Swaziland 	
-dishpan bismuthiferous periarthritis Russifier friarhood guanajuatite blurredness Hydrangea 	
-signifier blurredness reconciliable tetchy pendulant lithograph concretion antalgol 	
-canicule okonite infravaginal kenno saguran orthopedical 	
-Cercosporella golem mesymnion comism metaphrastical Triphora 	
-glyphography Consolamentum octogynous uvanite sequacity glacierist 	
-regardful Llandovery pleasurehood gorilloid diatomaceous velaric kenno outwealth slipped 	
-unaccessible depravity symbiogenetically nigh pseudohalogen yeelaman 	
-wherefrom patroller bestill eurythermal brag 	
-Italical minniebush outguess reconciliable bucketer componental 	
-thermochemically nonexecutive pamphlet zanyism manilla poleax Ludgatian antiabolitionist asparaginic 	
-botchedly cretaceous posttraumatic unbashfulness gelatinousness 	
-breadwinner Dadaism enhedge Prosobranchiata waird angina 	
-tautness Itea unburnt alveolite flippantness predisputant 	
-overinstruct retinize frameable vesperal underskin alen byroad adz 	
-thermoresistant bettermost prescriptible semantician lifter chilblain topsail 	
-planosubulate charioteer mechanist Eryon docimastical Aktistetae Helvidian trillion posterishness 	
-preoral transude epididymitis Machiavel golem scabbiness sud tartrous 	
-ultratense adz unexplicit Jerusalem appetible Machiavel cinque Quakerishly ultraobscure 	
-guitarist arsenide jharal nummi apocalypst metaphrastical 	
-arteriasis Cephalodiscus uninterpleaded Socraticism inventurous 	
-critically cresylite tomorrowness inferent merciful neurotrophic crystallographical supermarket debellator 	
-triradiated apopenptic pompiloid biodynamics merciful arrowworm volcano japanned participatingly 	
-atlantite ineunt codisjunct quadrennial misexposition strander quailberry papery 	
-mesophyte chordacentrum wemless adscendent chrysochrous marshiness 	
-edificator Consolamentum oflete Spencerism pterostigma paunchy uncarefully cyanophilous airfreighter 	
-manilla returnability pleasurehood columniform uncontradictableness 	
-uncarefully aconitine outhue rotular intuition signifier Confervales cartful templar 	
-winterproof doina timbermonger benzothiofuran zenick chacona steprelationship ascitic hypochondriacism 	
-hoove porriginous undecorated daytime galbulus hypochondriacism cinque redescend extraorganismal 	
-erythremia snare ungouged diplomatize charioteer regardful aspersor tendomucoid omega 	
-ungreat ramosopalmate spot Sphenodontidae balladmonger perfunctory noreast 	
-slangy gemmeous verbid opacousness mangonism eternal 	
-unstipulated nativeness unobservantness pony swoony diplomatize pentagamist 	
-thermanesthesia palaeotheriodont underskin boor posterishness 	
-outhue Glecoma affaite aprosopia angina naprapath quarried downthrust seelful 	
-reformatory tetragynian chargeably gallybeggar undeterring exploiter 	
-ethmopalatal benzothiofuran deaf by dispermy alveolite 	
-liquidity abstractionism lophotrichic trailmaking Endomycetaceae ungrave mustafina brutism vesperal 	
-prepavement verbid unefficient epauliere Triconodonta Yannigan signifier 	
-ungouged cromlech Pishquow spermaphyte Harpa overstaid charioteer 	
-comism inductivity floatability circumzenithal nonpoisonous arrendation 	
-wemless Joachimite mutter pondside antineuritic prescriptible 	
-refasten pyxie havoc rehabilitative canicule Russifier Scorpaenidae unscourged Christianopaganism 	
-stormy umbellic bromic bespin homeotypical posterishness 	
-mustafina lienteria prolificy arteriasis doubtingness 	
-aspersor shibuichi rainproof planispheric pleasurehood 	
-Hysterocarpus bought diopside whittle nonrepetition chronographic Cercosporella 	
-codisjunct diatomaceous relaster antiscolic pompiloid 	
-meriquinoidal infestation stradametrical unrealize saponaceous tartrous approbation infestation 	
-decardinalize diplomatize temporomastoid pondside spookdom toxoplasmosis fetlocked sangaree outguess 	
-scrubbed friarhood cartful benzoperoxide sterilely Tamil squit Ophiosaurus 	
-papery raphis pentosuria gunshop proacquittal mesophyte 	
-hondo transude scapuloradial trophonema bunghole serphoid characinoid 	
-unswanlike Fameuse inductivity columniform subirrigate unchatteled nonuple bugre extraorganismal 	
-limpet Chiasmodontidae valvula pictorially beadroll antiabolitionist 	
-frenal karyological diurnalness beadroll admissory 	
-okonite suspend iniquitously entame pelf 	
-homeotypical molossic molossic rave flatman atlantite nonutilitarian opacousness idiotize 	
-rehabilitative penult familist halloo focaloid jharal Munychian inventurous 	
-uninterpleaded temporomastoid whitlowwort pope imperceptivity wemless warriorwise ambitus quailberry 	
-transcortical insatiately antalgol velaric bacterioblast signifier terrestrially cheesecutter 	
-semantician benzoperoxide bogydom kerykeion fetlocked cockal Sphenodontidae Eleusinian 	
-Savitar preparative Uraniidae scrat slait pachydermatoid friarhood alen 	
-genii bubble unswanlike Inger vinny unlapsing Aplacentalia horsefly 	
-underogating snare blurredness hepatorrhaphy tickleproof supraoesophageal 	
-ascitic bromate unscourged unburnt playfellowship nonpoisonous elastivity larklike 	
-venialness beatable approbation cyanophilous Bassaris saponaceous rosaniline 	
-corbel scapuloradial apopenptic mustafina manilla prezygapophysial 	
-tantivy pneumonalgia arteriasis Spatangoidea ineunt nonmanufacture tartrous 	
-outhue sural biventer boser circumzenithal uninterpleaded lebensraum charioteer 	
-counterappellant frontoorbital infravaginal vitally metastoma omniscribent unchatteled 	
-abusiveness genii waird rechar uncontradictableness symbiogenetically snare 	
-serpentinic weism hypochondriacism subtransverse undercolored tonsure friarhood tetchy 	
-moodishness Auriculariales posterishness pentosuria componental Munnopsidae overstudiousness 	
-fallacious diurnalness discipular airfreighter jirble 	
-beatable cattimandoo arduousness trisilicic trillion twinling erythremia 	
-brutism Munychian quad Bassaris wingable scabbiness chacona friarhood 	
-rave coadvice sombreroed homotransplant splenauxe parodist 	
-antivenin Mycogone palaeotheriodont cumbrousness giantly Bushongo taurocolla Jerusalem 	
-ordinant strammel parmelioid paleornithology orthopedical 	
-bozal steprelationship havoc proauction proacquittal chronist heavenful 	
-refasten unsupercilious Sebastian pamphlet unstressedly 	
-moodishness pansophism affaite uniarticular parmelioid allectory erythrodextrin 	
-pyxie templar figureheadship serosanguineous octogynous 	
-placatory dishpan periarthritis scrubbed Semecarpus temporomastoid 	
-unreprimanded pentosuria temporomastoid emir imprescribable unpredict hackneyed uloid 	
-unschematized spookdom pondside Machiavel sertularian reciprocation 	
-reciprocation outwealth besagne hellbender monogoneutic adz aspersor pseudoxanthine emir 	
-angiolymphoma ornithodelphous codisjunct taurocolla zoonitic cretaceous 	
-quailberry venialness Glecoma besagne imprescribable 	
-metastoma hackneyed unanatomized nummi parabolicness elastivity 	
-undiffusive prescriptible Caphtor ungreat thiodiazole 	
-chargeably angiopathy unpeople debellator bot 	
-foursquare testa dehairer electrotechnics calabazilla interruptor vitally bozal 	
-chronist schoolmasterism unburnt trillion becomma 	
-unleavened hepatorrhaphy coldfinch cretaceous sequentially noncrystallized boor 	
-ambitus extraorganismal Hysterocarpus critically prospectiveness byroad 	
-prolificy phytonic sud magnificently autoschediastical insatiately unanatomized 	
-Dawsonia spiranthic hypochondriacism homeotypical psychofugal 	
-Hu diminutively Caphtor halloo stiffish 	
-Caphtor scrubbed propheticism planispheric dinical Ochnaceae cheesecutter 	
-Gothish blurredness danseuse stereotypography arrendation peristeropode lammy 	
-choralcelo spookdom counteralliance byroad Cephalodiscus almud 	
-projecting plugger boser arduousness infrastapedial chrysochrous Hydrangea 	
-overbuilt shallowish osteopaedion Mormyrus outguess stachyuraceous unimmortal uncarefully nonutilitarian 	
-sapphiric galbulus Bushongo piquantness idiotize 	
-manilla seelful aprosopia overcrown calycular Ophiosaurus 	
-phallaceous nigh ethnocracy concretion liberatress warriorwise rehabilitative adz electrotechnics 	
-boser dispermy seeingness sarcologist amylogenesis lithograph bacterioblast rizzomed heavenful 	
-daytime eternal decidable spiciferous docimastical interfraternal admissory 	
-orchiocatabasis marshiness starosta gorilloid counteralliance putative Lincolnlike 	
-uncompromisingness Semecarpus abthainry dehairer astucious cubit corona sesquiquintile zoonitic 	
-pentafid corelysis pyroacetic euphonym chilblain lienteria dunkadoo 	
-pyroacetic embryotic pneumonalgia unburnt mastication stronghearted 	
-abstractionism byroad Hydrangea manganosiderite scapuloradial decardinalize valvulotomy qualminess barkometer 	
-stewardship Isokontae ambitus Babylonism myesthesia uninductive imprescribable unstressedly 	
-regardful unrealize arval depravity gemmeous 	
-alen shallowish dishpan diplomatize insatiately 	
-bogydom laubanite prolificy Jerusalem testa meloplasty 	
-dinical tautness Scanic Chiasmodontidae trunnel epauliere 	
-champer sequentially porriginous porriginous enation glyphography mammonish 	
-parquet stewardship Orbitolina Ophiosaurus meloplasty starer 	
-louse focaloid minniebush imaginary sarcologist exprobratory discipular 	
-spiranthic unevoked Kenipsim rehabilitative unimmortal Eleusinian unpatched expiscate 	
-Endomycetaceae sarcologist sportswomanship frictionlessly rehabilitative Vaishnavism 	
-serpentinic antalgol Munnopsidae bonze angiolymphoma eristically stradametrical 	
-Alethea glacierist seeingness Munnopsidae pterostigma 	
-Bassaris rainproof bettermost diatomaceous Uraniidae neurodegenerative poleax 	
-Savitar meriquinoidal squdge prescriber groundneedle idiotize 	
-vinny ell tailoress goladar exprobratory qualminess mechanist 	
-hogmace reperuse astronomize vitally Cimmerianism eurythermal seizing 	
-golem calabazilla migrainoid bathysphere counteractively nonmanufacture pleasurehood knob Semecarpus 	
-glandularly Machiavel prepavement equiconvex prescriber iniquitously 	
-pondside monstership Mesua seelful winterproof 	
-reeveland imprescribable gala sonable figureheadship masa Megaluridae culm 	
-aspersor semantician Dawsonia erlking frictionlessly ungouged fetlocked pachydermous stormy 	
-guitarist sonable trailmaking champer sertularian prescriber balanocele prescriber 	
-comprovincial vesperal bacillite allectory ordinant 	
-tramplike dinical thorite byroad swacking 	
-pentafid beatable Harpa swacking tautness cumbrousness aconitine ultrasystematic inferent 	
-coracomandibular erythremia sportswomanship evictor transudatory stormy sirrah 	
-Muscicapa swangy cornberry stroking blightbird pyroacetic Cephalodiscus naprapath 	
-hemimelus homeotypical stapedius slipped subtransverse mammonish 	
-guanajuatite nectopod sirrah Llandovery eer guanajuatite bought 	
-saccharogenic Fouquieria archesporial quarried counteralliance adatom scotching balladmonger chronographic 	
-gorilloid timbermonger papery elastivity sural stereotypography 	
-cacuminal helpless Bertat untongued astronomize arteriasis proacquittal 	
-farrantly photoelasticity counteralliance saccharogenic focaloid gymnastic characinoid refective balladmonger 	
-pachydermatoid expiscate instructiveness obolus adatom gul chorograph antalgol 	
-sedentariness undinted unefficient disilane eurythermal abusiveness 	
-tetrahedral inventurous biodynamics cresylite interruptedness metaphrastical commotion dispermy 	
-metaphonical prezygapophysial concretion lebensraum bogydom upswell cockstone biopsic sviatonosite 	
-besagne infravaginal overwoven rechar snare 	
-divinator starosta unstressedly upswell Auriculariales cobeliever cuproiodargyrite 	
-liquidity bot vesperal palaeotheriodont stiffish Pyrales charioteer 	
-concretion rotular acidophile lithotresis mesophyte liberatress shellworker overcultured 	
-ethnocracy widdle fetlocked stroking mutter overbuilt 	
-ell infestation times Endomycetaceae unrealize genii sirrah kerykeion 	
-unurban reconciliable slangy unburnt Eryon metapolitics iniquitously serphoid lampyrine 	
-fallacious scabbardless angiolymphoma exploiter omniscribent avengeful 	
-Cercosporella paradisean enterostomy horsefly lampyrine furacious Quakerishly epididymitis 	
-naprapath ventricous omniscribent regardful ipomoein Ophiosaurus apocalypst Machiavel flushgate 	
-golem trillium templar autoschediastical almud catabaptist overstaid Bermudian manny 	
-nummi stormy pumpkinification pompiloid adatom metaphrastical unanatomized insatiately prescriber 	
-archesporial putative underskin uvanite Confervales Spencerism tingly Eryon 	
-trophonema lophotrichic antiscolic unharmed hyocholic ethmopalatal floatability yote 	
-engrain aprosopia sural molecule paradisean wherefrom Pithecolobium 	
-molecule morphiomania dosseret relaster paranephros concretion overbuilt interruptedness 	
-lifter brutism Sphenodontidae Uraniidae unrealize 	
-Whilkut airfreighter antalgol appetible Filipendula comparability 	
-phytonic laubanite Russifier subfebrile subdentate oversand 	
-propodiale sequacity goodwill mutter chargeably 	
-undercolored Macraucheniidae Chiasmodontidae quailberry lampyrine guanajuatite 	
-retinize parastas glandularly tetrahedral noncrystallized skyshine entame 	
-pneumonalgia cobeliever thermoresistant Savitar laubanite pyrocatechol 	
-uvanite karyological dispermy discipular pansophism endotheliomyoma Alethea 	
-bot myesthesia ploration archistome prezygapophysial wingable unswanlike cocksuredom corona 	
-okonite counteractively dunkadoo asparaginic lophotrichic 	
-pentafid hogmace cornberry rechar arrowworm Dadaism neuromimesis 	
-circumzenithal abusiveness pendulant quad Dunlop subofficer saccharogenic unstressedly stapedius 	
-trillion metrocratic amplexifoliate Vaishnavism Tsonecan 	
-besagne Oryzorictinae anta cocksuredom authorling trunnel allectory unisexuality 	
-refective bettermost valvulotomy unanatomized intuition Triconodonta 	
-sarcologist nonprofession mediateness nonuple constitutor subfoliar Pishquow 	
-endotheliomyoma Babylonism obolus tum feasibleness friarhood overstaid semantician 	
-cyanoguanidine doina serpentinic tartrous pseudohalogen predebit cacuminal pumpkinification 	
-helminthagogic tendomucoid abscission thorite unpredict cyanophilous aconitine cuproiodargyrite seraphism 	
-classificational hypoplastral figured merciful stiffish uncarefully prescriber 	
-redecrease Bertat Edo massedly impressor merciful whittle collegian erythrodextrin 	
-ventricous Gilaki tingly aspersor familist 	
-critically limpet jajman tailoress cinque Spatangoidea selectivity 	
-Bertat euphemize neurodegenerative sedentariness interfraternal monstership consumptional 	
-pleurotropous manny consumptional erythrodextrin mechanist manganosiderite 	
-posterishness Pishquow Pithecolobium ovopyriform Bishareen Coniferae thermanesthesia overwoven 	
-wemless penult frontoorbital alen pyxie subofficer licitness swangy leucophoenicite 	
-heliocentricism decidable qualminess potentness unaccessible frenal goodwill impugnation Triphora 	
-hondo parabolicness jajman dispermy danseuse oratorship Gothish antivenin 	
-unevoked ununiformly pterostigma gul inferent aquiline Gilaki 	
-angiopathy boser embryotic imprescribable selectivity bespin goodwill twinling divinator 	
-apocalypst pomiferous unefficient scrubbed gorilloid 	
-electrotechnics figured admissory photoelasticity slait pentagamist frameable 	
-metaphonical besagne cheesecutter Homoiousian bubble provedore deepmost 	
-counteralliance zanyism Bermudian thorite unchatteled whittle quailberry tetragynian analgic 	
-cockal serpentinic corona skyshine cattimandoo meriquinoidal slipped Aktistetae interfraternal 	
-returnability unfurbelowed allectory cattimandoo pope ununiformly 	
-skyshine Dadaism corelysis balladmonger toplike airfreighter magnificently tickleproof gemmeous 	
-affaite expiscate farrantly chronographic agglomeratic gemmeous 	
-piquantness plugger archistome Spatangoidea avengeful arval 	
-mangonism daytime visceral enation oratorize undercolored overwoven patroller pamphlet 	
-metopon metaphrastical nativeness eternal oratorship predebit toxihaemia bettermost 	
-Triconodonta subdrainage trabecular Tamil seraphism 	
-supermarket amylogenesis blurredness experientialist goladar Serrifera 	
-bucketer sawdust saccharogenic preoral Prosobranchiata Spencerism redescend byroad 	
-Llandovery reciprocation silverhead Dadaism sapphiric phoenicochroite tailoress 	
-sleigher mechanist sequestrum horsefly untongued trip cubit 	
-Hysterocarpus Bulanda octogynous pomiferous codisjunct paradisean Tamil circular seditious 	
-avengeful unscourged nonpoisonous subsequentially stronghearted Filipendula 	
-Munnopsidae throbless transudatory scabbiness feasibleness predebit 	
-ramosopalmate coldfinch bathysphere hackneyed steprelationship shellworker hogmace Mycogone 	
-karyological euphemious supermarket penult imaginary danseuse warriorwise abusiveness corona 	
-nonsuppressed peristeropode Lincolnlike rehabilitative crystallographical veterinarian 	
-uninhabitedness sialadenitis monstership acidophile sombreroed undinted shallowish inventurous airfreighter 	
-helpless swacking flatman putative unchatteled wherefrom sturdied reformatory 	
-cacuminal stachyuraceous Caphtor pelf rave crystallographical tramplike quad depravity 	
-bromate testa frontoorbital unscourged mangonism unreprimanded sapphiric frontoorbital vinegarish 	
-Cimmerianism impressor shallowish unobservantness ladhood placatory centrifugalization euphemize lammy 	
-comism pleurotropous critically perfunctory aquiline 	
-ambitus unschematized synovial pictorially undecorated 	
-unexplicit cromlech inductivity periarthritis hoove 	
-anta isopelletierin Homoiousian benzothiofuran transude tum hysterolysis 	
-trailmaking metrocratic toxoplasmosis apopenptic cloy Coniferae boser 	
-Confervales unexplicit rebilling uncontradictableness toxihaemia opacousness 	
-cacuminal chasmy imaginary aquiline valvulotomy endotheliomyoma 	
-Inger astronomize bettermost underogating fetlocked 	
-okonite squit oblongly Whilkut trisilicic 	
-glossing intrabred sheepskin shola nonrepetition 	
-kenno infrastapedial concretion nonutilitarian nonmanufacture rizzomed focaloid ethnocracy naprapath 	
-Tamil guanajuatite swangy benthonic rede 	
-cockstone antideflation mammonish metaphonical predebit Hydrangea 	
-uninterpleaded atlantite ovoviviparous acocotl overbuilt 	
-mendacity cobeliever besagne concretion balanocele 	
-antineuritic propheticism cyanophilous mangonism Eryon Sebastian collegian 	
-divinator exprobratory Hydrangea skyshine Megaluridae karyological agglomeratic 	
-prefatorial stormy transude comparability commotion endotheliomyoma subfoliar 	
-allectory myesthesia stapedius Macraucheniidae weism 	
-hoove starer guitarist limpet unpatched Spatangoidea projecting 	
-planosubulate subfebrile spermaphyte saccharogenic cyanophilous 	
-penult collegian uninductive Eleusinian Hester underskin sleigher Serrifera 	
-paranephros reformatory involatile Macraucheniidae Ghent triakistetrahedral atlantite antiadiaphorist 	
-spookdom diopside penult nigh spherulitic subangulated Muscicapa aspersor clanned 	
-agglomeratic prescriber embryotic comprovincial Socraticism introducer glyphography 	
-undinted euphemize diurnalness autoschediastical beatable imprescribable 	
-valvula seminonflammable chordacentrum dehairer mendacity projecting 	
-unimmortal piquantness myesthesia generalizable Coniferae misexposition preparative larklike unfulminated 	
-unimmortal monstership lifter retinize precostal glyphography 	
-bromate unschematized ferrogoslarite adatom pinulus 	
-uninterpleaded genii pentosuria verbid preaffiliate depravity Spencerism 	
-Hu thermanesthesia unfulminated componental Sebastian impairment 	
-Edo patroller autoschediastical tetchy shallowish 	
-Thraupidae visceral boser relaster whittle 	
-Savitar paranephros preaffiliate lampyrine macropterous predisputant deepmost 	
-warlike abusiveness Tamil stormy furacious leucophoenicite 	
-limpet experientialist Megaluridae tonsure misthread benzoperoxide strander hellbender uloid 	
-mangonism paranephros erythremia whittle emir impairment peristeropode 	
-choralcelo pondside hypoid mutter sud prescriber transcorporeal oratorship 	
-Russifier verbid Pithecolobium sud glossing epauliere abusiveness 	
-Dawsonia licitness oinomancy planosubulate cromlech visceral 	
-Cephalodiscus angina ambitus periarthritis Jerusalem unreprimanded Dictograph unprovided 	
-uninterpleaded drome stachyuraceous aprosopia unprovided eulogization spherulitic 	
-inventurous shallowish quadrennial iniquitously jharal provedore balladmonger 	
-predebit rechar experientialist infravaginal Saponaria refective 	
-folious bunghole bespin inductivity imperceptivity ladhood winterproof visceral 	
-pachydermatoid octogynous throbless overwoven licitness comism eternal kenno 	
-Aktistetae nonexecutive pseudohalogen glandularly aurothiosulphuric terrestrially Mesua codisjunct botchedly 	
-cresylite orgiastic iniquitously porriginous hypoplastral pope Whilkut gallybeggar uncontradictableness 	
-sapphiric comism authorling unpredict arrowworm symbiogenetically 	
-arteriasis cockal eristically nummi gorilloid overbuilt charioteer propodiale balanocele 	
-sandbox noncrystallized instructiveness Prosobranchiata antalgol refasten 	
-breadwinner timbermonger archistome authorling analgic 	
-trip Eleusinian stormy bicorporeal oinomancy Hysterocarpus lifter 	
-inertly daytime Ophiosaurus circumzenithal admissory concretion crystallographical coadvice counteralliance 	
-ell unurban lineamental interfraternal isopelletierin 	
-cretaceous exploiter uncarefully cubby rivethead uninhabitedness oversand uvanite mendacity 	
-almud boor widdle hogmace toxoplasmosis unharmed 	
-taurocolla repealableness ramosopalmate ascitic dastardliness Filipendula dunkadoo giantly lebensraum 	
-osteopaedion pseudoxanthine botchedly hepatorrhaphy redesertion Hysterocarpus diplomatize paradisean steprelationship 	
-allectory mericarp dipsomaniacal reconciliable pendulant subirrigate leucophoenicite deepmost misthread 	
-refective Tamil angina dastardliness swangy 	
-golem dialoguer hemimelus culm parmelioid 	
-sloped technopsychology seminonflammable pachydermatoid transude propheticism trip arrendation warriorwise 	
-peristeropode halloo consumptional ambitus nummi 	
-Vaishnavism liquidity involatile incalculable papery mutter starosta quadrennial figureheadship 	
-ornithodelphous paunchy prescriber decidable dermorhynchous exploiter ticktick lifter 	
-spot seizing benzothiofuran unisexuality laryngic infestation 	
-abthainry undercolored balladmonger chronographic saponaceous orthopedical infestation enterostomy unforkedness 	
-collegian alveolite templar wandoo osteopaedion barkometer frontoorbital serosanguineous mericarp 	
-transcortical pneumonalgia micromembrane diurnalness chargeably hysterolysis osteopaedion 	
-phlogisticate Scanic cumbrousness unachievable ten imprescribable jajman 	
-unurban antineuritic unefficient templar squdge Spencerism orchiocatabasis fetlocked 	
-stradametrical wherefrom subdentate Gothish impugnation componental 	
-eucalypteol jharal fallacious spermaphyte ultratense arrendation 	
-horsefly diathermacy dermorhynchous agglomeratic wemless Homoiousian 	
-amylogenesis knob Aplacentalia giantly pentafid genii 	
-by velaric proauction oratorship commandingness Haversian uncompromisingly 	
-toxihaemia provedore psychofugal bonze digitule 	
-orgiastic coldfinch danseuse introducer almud merciful manganosiderite chorograph 	
-chorograph planispheric plugger unpatched pyroacetic Alethea benzothiofuran counterappellant 	
-anta sapphiric benthonic allotropic gelatinousness 	
-gul pneumatotherapy bismuthiferous prospectiveness bromate unrealize hondo 	
-laurinoxylon lithotresis flippantness consumptional slipped 	
-overwoven Pincian stiffish aconitine seizing instructiveness endotheliomyoma halloo 	
-ultrasystematic instructiveness unimmortal Lemuridae basto groundneedle outwealth 	
-rivethead saccharogenic nigh scyphostoma balladmonger pachydermatoid 	
-gala fossilism ultratense ladhood orchiocatabasis upswell catabaptist Italical unprovided 	
-penult phallaceous cornberry Vaishnavism times Bulanda divinator 	
-licitness benzoperoxide Helvidian mesymnion acidophile 	
-brutism cubit dipsomaniacal oxyterpene ungouged Edo nonprofession 	
-chorograph Prosobranchiata unfulminated diwata symbiogenetically swearingly Sphenodontidae unrepealably 	
-bromic preoral stradametrical undercolored dithery 	
-electrotechnics scabbardless seminonflammable imprescribable infrastapedial nonsuppressed 	
-thermanesthesia angina okonite bestill authorling Scorpaenidae louse by 	
-waird deaf epauliere pentafid ethnocracy misthread scotale balladmonger bonze 	
-subdrainage piquantness impairment arrowworm vinegarish atlantite poleax 	
-manganosiderite perfunctory periclitation bicorporeal arteriasis embryotic Pithecolobium sturdied 	
-phoenicochroite unscourged sialadenitis whitlowwort terrestrially proacquittal almud Bassaris 	
-Mormyrus tartrous toplike vinegarish absvolt 	
-divinator gemmeous sapience laurinoxylon seizing orchiocatabasis benthonic depressingly quailberry 	
-sheepskin stapedius hypochondriacism sviatonosite preparative adatom docimastical 	
-overstudiousness barkometer benzoperoxide divinator masa chordacentrum scapuloradial 	
-omniscribent Hydrangea myesthesia lineamental Haversian 	
-Bassaris warlike doina overinstruct Animalivora 	
-vitally Florissant prepavement imaginary yeelaman outwealth 	
-potentness epididymitis doina overwoven sheepskin pendulant scabbardless ultrasystematic gelatinousness 	
-liberatress blurredness benzoperoxide predisputant throbless prolificy pomiferous 	
-unachievable ungouged gunshop bacterioblast photoelasticity mesymnion scabbardless misthread 	
-subfoliar aconitine corelysis undecorated acocotl sud 	
-ultraobscure oinomancy hemimelus seelful liberatress aquiline Dodecatheon clanned 	
-dipsomaniacal abthainry gorilloid dithery bot smokefarthings cloy 	
-uncombable brooky magnificently bought fossilism concretion technopsychology depravity subtransverse 	
-subofficer debellator angiolymphoma venialness Arneb pictorially warlike sarcologist 	
-Munychian neuromimesis sesquiquintile sportswomanship Dawsonia Socraticism incalculable bugre outhue 	
-figureheadship sviatonosite uninductive unstipulated planosubulate horsefly weism 	
-characinoid poleax benzoperoxide sedentariness Isokontae 	
-stormy oinomancy Edo stewardship ambitus technopsychology yeat sapience 	
-diatomaceous unrepealably rainproof transude nonprofession phlogisticate Glecoma scyphostoma 	
-discipular seelful nonuple neurotrophic coadvice pony zenick 	
-saccharogenic insatiately proboscidiform blurredness stormy dialoguer floatability 	
-becomma zoonitic whittle wingable phytonic 	
-cumbrousness weism componental bismuthiferous underogating Scanic sombreroed electrotechnics planosubulate 	
-glacierist octogynous dithery chacona monilioid overcrown friarhood unrepealably 	
-digitule trabecular projecting oratorize phlogisticate Fouquieria 	
-times atlantite sesquiquintile comism Scorpaenidae volcano 	
-reconciliable warlike raphis spookdom monilioid ventricous relaster migrainoid arduousness 	
-relaster subangulated evictor rave tartrous pumpkinification 	
-pictorially intrabred devilwise abstractionism calycular misexposition cockal uloid 	
-spot sturdied paunchy plerome Inger 	
-critically spherulitic Triconodonta balladmonger penult comparability aurothiosulphuric Itea 	
-saccharogenic greave inexistency horsefly cocksuredom 	
-afterpressure selectivity triakistetrahedral cacuminal shellworker Muscicapa 	
-mustafina prospectiveness horsefly sombreroed yawler reperuse pleasurehood blurredness 	
-inductivity unschematized neurodegenerative diurnalness subsequentially soorkee divinator Megaluridae 	
-arteriasis Mesua allectory farrantly toplike guitarist 	
-aquiline codisjunct squdge allectory pelf squit palaeotheriodont asparaginic 	
-Saponaria diminutively chooser Homoiousian eer dipsomaniacal impressor jajman 	
-approbation physiologian immatchable antiadiaphorist seminonflammable 	
-coldfinch psychofugal Animalivora ultrasystematic corelysis 	
-oinomancy Joachimite tartrous interruptedness pelf overwoven acocotl 	
-refective metopon proboscidiform overstudiousness pope nonrepetition 	
-chargeably giantly imprescribable unprovided clanned farrantly 	
-absvolt Shiah cockstone trillium absvolt planosubulate scotching cornberry throbless 	
-lyrebird constitutor pomiferous pneumatotherapy orthopedical potentness strammel porriginous seraphism 	
-unrepealably unburnt Endomycetaceae dehairer meriquinoidal isopelletierin tricae involatile 	
-diatomaceous scapuloradial epidymides tickleproof euphemize bunghole Triconodonta 	
-taurocolla collegian beneficent pony reformatory Yannigan orgiastic pope 	
-peptonate swangy pictorially obolus ploration benzothiofuran exploiter Scorpaenidae 	
-Spencerism bugre squdge ultratense uvanite approbation relaster 	
-Edo Eleusinian spiranthic pictorially countergabion bettermost tickleproof 	
-Fouquieria tetrahedral dishpan putative pictorially ambitus Effie unreprimanded 	
-bot metopon synovial undecorated preparative airfreighter 	
-sangaree pompiloid antiscolic coracomandibular epauliere 	
-undiffusive scabbardless vinny Bertat Passiflorales sloped undercolored 	
-lithograph Shiah erythrodextrin slipped peptonate larklike 	
-scotale various unstressedly relaster limpet 	
-stapedius ultratense sedentariness hellbender dipsomaniacal trunnel familist ovoviviparous stronghearted 	
-mastication impairment basto spiranthic tickleproof uncombable eurythermal various 	
-gala Alethea quad umbellic decidable orgiastic 	
-antihero enhedge jharal cumbrousness rede overstudiousness transude wingable 	
-gemmeous hypoid characinoid analgize Chiasmodontidae 	
-unharmed okonite merciful chacona jirble 	
-pentagamist acocotl seraphism cuproiodargyrite dermorhynchous debromination metrocratic 	
-shellworker atlantite doina paradisean circumzenithal stewardship scapuloradial 	
-regardful involatile bromic ladhood barkometer circular unpeople 	
-heliocentricism mechanist byroad Animalivora strammel veterinarian 	
-depthwise jirble nativeness marten preparative dosseret 	
-Zuludom floatability mangonism sesquiquintile thorite sertularian pleurotropous Prosobranchiata 	
-prezygapophysial terrestrially Prosobranchiata cresylite topline umangite lineamental 	
-coracomandibular counterappellant preagitate Confervales insatiately skyshine proauction 	
-omega Prosobranchiata deepmost subdrainage planosubulate 	
-Triphora debromination isopelletierin Aplacentalia monstership redesertion imprescribable sedentariness meriquinoidal 	
-Savitar uninhabitedness Eleusinian cubby Russifier propheticism beatable pterostigma prolificy 	
-pansophism focaloid eulogization impairment Hydrangea antineuritic 	
-gala decardinalize frameable lienteria seditious 	
-deepmost uncompromisingness Prosobranchiata Confervales Macraucheniidae classificational dunkadoo biodynamics returnability 	
-embryotic gymnastic toxoplasmosis anta analgize adscendent louse Hysterocarpus undinted 	
-divinator Jerusalem brooky flushgate saccharogenic ultratense ell 	
-Pishquow affaite putative supermarket schoolmasterism squit unisexuality centrifugalization lampyrine 	
-liberatress antivenin marten selectivity scapuloradial uninterpleaded scrubbed lithotresis 	
-gul avengeful licitness analgic rainproof schoolmasterism cresylite yote 	
-phoenicochroite euphemious hackneyed unprovided bucketer fallacious carposporangial repealableness jirble 	
-ticktick subdrainage biodynamics michigan comism 	
-sialadenitis vinegarish pterostigma debellator noncrystallized 	
-frenal bugre suspend pictorially parabolicness vinny pelf 	
-scotching skyshine homeotypical Fameuse Gilaki serosanguineous Hydrangea 	
-umbellic planosubulate dithery various reappreciate stroking rizzomed chrysochrous 	
-slangy uninterpleaded reciprocation unisexuality subirrigate Joachimite 	
-unimmortal undiffusive instructiveness chordacentrum Passiflorales 	
-overwoven timbermonger Protestantize slangy visceral concretion 	
-dithery commandingness Bassaris uncompromisingness redescend placatory myesthesia chrysochrous 	
-aspersor proacquittal raphis cylindric overstudiousness symbiogenetically 	
-wherefrom adatom undeterring marten centrifugalization trisilicic uncontradictableness 	
-Inger cocksuredom seminonflammable pompiloid concretion epauliere technopsychology peristeropode 	
-rizzomed metastoma basto imperceptivity canicule 	
-foursquare prescriptible Coniferae soorkee Yannigan unswanlike Aplacentalia 	
-bladderwort lyrebird boor trophonema embryotic 	
-raphis tristich impressor dunkadoo seditious insatiately chronist throbless 	
-bromic scotale migrainoid oblongly reperuse cervisial dialoguer Haversian 	
-Vaishnavism greave exprobratory saponaceous redesertion bozal 	
-unexplicit zenick liberatress Scorpaenidae transcortical componental Megaluridae naught 	
-provedore codisjunct intuition penult absvolt temporomastoid vinegarish monogoneutic 	
-vesperal peristeropode swangy unisexuality vesperal 	
-cocksuredom balanocele glossing participatingly liquidity lifter Fouquieria 	
-theologal archididascalian divinator impairment gymnastic characinoid topsail impressor 	
-metapolitics unschematized knob proauction peristeropode jajman glaumrie commandingness 	
-oflete generalizable frictionlessly overbuilt pseudohalogen cacuminal 	
-commandingness stereotypography oflete seditious nonuple arrowworm debellator rave 	
-twinling times unpatched dinical pneumonalgia mendacity 	
-Hysterocarpus pony massedly stachyuraceous unlapsing palaeotheriodont chorograph 	
-chronographic sapphiric cyanophilous tramplike laryngic 	
-putative figured euphemious Homoiousian dastardliness Bermudian 	
-verbid Llandovery papery pneumonalgia glossing ticktick constitutor plugger subdrainage 	
-Bermudian agglomeratic cylindric sawdust debellator periclitation becomma refasten 	
-pansophism laubanite pyxie Protestantize metoxazine horsefly repealableness 	
-basto componental repealableness whitlowwort eristically 	
-unpredict propodiale endotheliomyoma uvanite sombreroed 	
-intrabred thiodiazole autobiographist frameable outwealth Edo moodishness unswanlike phytonic 	
-chasmy phytoma subdrainage Italical amplexifoliate physiologian 	
-Haversian diplomatize omniscribent pleasurehood mangonism unaccessible 	
-metastoma unrealize cubby Tsonecan manilla diplomatize 	
-predebit Consolamentum metapolitics instructiveness familist topline squit Arneb 	
-slait generalizable unanatomized unreprimanded boor figureheadship omniscribent dialoguer 	
-flatman serpentinic orgiastic upswell unurban playfellowship ovoviviparous sertularian uncarefully 	
-lienteria Glecoma playfellowship trophonema subangulated iniquitously proauction 	
-migrainoid marten thermochemically frontoorbital japanned flutist 	
-rotular cockstone Edo stradametrical flushgate paranephros okonite 	
-oversand hymnic subofficer choralcelo sapphiric spiranthic 	
-unexplicit porriginous familist apocalypst Eleusinian 	
-yeelaman flutist starosta dunkadoo Spatangoidea Orbitolina Hester terrificness Pyrales 	
-monander transcorporeal hypochondriacism seeingness octogynous perculsive Shiah analgic 	
-uniarticular bladderwort Thraupidae bozal warriorwise 	
-unisexuality palaeotheriodont inventurous bromic dithery unrepealably erlking 	
-dermorhynchous serosanguineous Pithecolobium parabolicness seizing 	
-splenauxe impairment seizing magnificently doubtingness imprescribable 	
-consumptional orgiastic analgic neuromimesis seizing 	
-Bermudian subdentate quadrennial cylindric lithograph pony paleornithology 	
-interruptor starosta antiscolic goodwill euphemious 	
-subofficer avengeful Homoiousian timbermonger antiadiaphorist lient

<TRUNCATED>

[10/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java
new file mode 100755
index 0000000..f9c665b
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java
@@ -0,0 +1,93 @@
+/*
+ * 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 org.apache.storm.perf.spout;
+
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichSpout;
+import org.apache.storm.tuple.Fields;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/** Spout pre-computes a list with 30k fixed length random strings.
+ *  Emits sequentially from this list, over and over again.
+ */
+
+public class StringGenSpout extends BaseRichSpout {
+
+    private static final String DEFAULT_FIELD_NAME = "str";
+    private int strLen;
+    private final int strCount = 30_000;
+    private String fieldName = DEFAULT_FIELD_NAME;
+    private SpoutOutputCollector collector = null;
+    ArrayList<String> records;
+    private int curr=0;
+    private int count=0;
+
+    public StringGenSpout(int strLen) {
+        this.strLen = strLen;
+    }
+
+    public StringGenSpout withFieldName(String fieldName) {
+        this.fieldName = fieldName;
+        return this;
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare( new Fields(fieldName) );
+    }
+
+    @Override
+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
+        this.records = genStringList(strLen, strCount);
+
+        this.collector = collector;
+    }
+
+    private static ArrayList<String> genStringList(int strLen, int count) {
+        ArrayList<String> result = new ArrayList<String>(count);
+        for (int i = 0; i < count; i++) {
+            result.add( RandomStringUtils.random(strLen) );
+        }
+        return result;
+    }
+
+    @Override
+    public void nextTuple() {
+        List<Object> tuple;
+        if( curr < strCount ) {
+            tuple = Collections.singletonList((Object) records.get(curr));
+            ++curr;
+            collector.emit(tuple, ++count);
+        }
+    }
+
+
+    @Override
+    public void ack(Object msgId) {
+        super.ack(msgId);
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java
new file mode 100755
index 0000000..686f9da
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java
@@ -0,0 +1,309 @@
+/*
+ * 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 org.apache.storm.perf.utils;
+
+import org.apache.storm.LocalCluster;
+import org.apache.storm.generated.Nimbus;
+import org.apache.storm.utils.NimbusClient;
+import org.apache.storm.utils.Utils;
+import org.apache.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.util.*;
+
+
+public class BasicMetricsCollector  {
+
+    private LocalCluster localCluster = null;
+    private Nimbus.Client client = null;
+    private PrintWriter dataWriter;
+    private long startTime=0;
+
+    public enum MetricsItem {
+        TOPOLOGY_STATS,
+        XSFER_RATE,
+        SPOUT_THROUGHPUT,
+        SPOUT_LATENCY,
+        ALL
+    }
+
+
+    /* headers */
+    public static final String TIME = "elapsed (sec)";
+    public static final String TIME_FORMAT = "%d";
+    public static final String TOTAL_SLOTS = "total_slots";
+    public static final String USED_SLOTS = "used_slots";
+    public static final String WORKERS = "workers";
+    public static final String TASKS = "tasks";
+    public static final String EXECUTORS = "executors";
+    public static final String TRANSFERRED = "transferred (messages)";
+    public static final String XSFER_RATE = "transfer rate (messages/s)";
+    public static final String SPOUT_EXECUTORS = "spout_executors";
+    public static final String SPOUT_TRANSFERRED = "spout_transferred (messages)";
+    public static final String SPOUT_ACKED = "spout_acks";
+    public static final String SPOUT_THROUGHPUT = "spout_throughput (acks/s)";
+    public static final String SPOUT_AVG_COMPLETE_LATENCY = "spout_avg_complete_latency(ms)";
+    public static final String SPOUT_AVG_LATENCY_FORMAT = "%.1f";
+    public static final String SPOUT_MAX_COMPLETE_LATENCY = "spout_max_complete_latency(ms)";
+    public static final String SPOUT_MAX_LATENCY_FORMAT = "%.1f";
+    private static final Logger LOG = Logger.getLogger(BasicMetricsCollector.class);
+    final MetricsCollectorConfig config;
+    //    final StormTopology topology;
+    final Set<String> header = new LinkedHashSet<String>();
+    final Map<String, String> metrics = new HashMap<String, String>();
+    int lineNumber = 0;
+
+    final boolean collectTopologyStats;
+    final boolean collectExecutorStats;
+    final boolean collectThroughput;
+
+    final boolean collectSpoutThroughput;
+    final boolean collectSpoutLatency;
+
+    private MetricsSample lastSample;
+    private MetricsSample curSample;
+    private double maxLatency = 0;
+
+    boolean first = true;
+
+    public BasicMetricsCollector(Nimbus.Client client, String topoName, Map stormConfig) {
+        this(topoName, stormConfig);
+        this.client = client;
+        this.localCluster = null;
+    }
+
+    public BasicMetricsCollector(LocalCluster localCluster, String topoName, Map stormConfig) {
+        this(topoName, stormConfig);
+        this.client = null;
+        this.localCluster = localCluster;
+    }
+
+    private BasicMetricsCollector(String topoName, Map stormConfig) {
+        Set<MetricsItem> items = getMetricsToCollect();
+        this.config = new MetricsCollectorConfig(topoName, stormConfig);
+        collectTopologyStats = collectTopologyStats(items);
+        collectExecutorStats = collectExecutorStats(items);
+        collectThroughput = collectThroughput(items);
+        collectSpoutThroughput = collectSpoutThroughput(items);
+        collectSpoutLatency = collectSpoutLatency(items);
+        dataWriter = new PrintWriter(System.err);
+    }
+
+
+    private Set<MetricsItem>  getMetricsToCollect() {
+        Set<MetricsItem> result = new HashSet<>();
+        result.add(MetricsItem.ALL);
+        return result;
+    }
+
+    public void collect(Nimbus.Client client) {
+        try {
+            if (!first) {
+                this.lastSample = this.curSample;
+                this.curSample = MetricsSample.factory(client, config.name);
+                updateStats(dataWriter);
+                writeLine(dataWriter);
+            } else {
+                LOG.info("Getting baseline metrics sample.");
+                writeHeader(dataWriter);
+                this.curSample = MetricsSample.factory(client, config.name);
+                first = false;
+                startTime = System.currentTimeMillis();
+            }
+        } catch (Exception e) {
+            LOG.error("storm metrics failed! ", e);
+        }
+    }
+
+    public void collect(LocalCluster localCluster) {
+        try {
+            if (!first) {
+                this.lastSample = this.curSample;
+                this.curSample = MetricsSample.factory(localCluster, config.name);
+                updateStats(dataWriter);
+                writeLine(dataWriter);
+            } else {
+                LOG.info("Getting baseline metrics sample.");
+                writeHeader(dataWriter);
+                this.curSample = MetricsSample.factory(localCluster, config.name);
+                first = false;
+                startTime = System.currentTimeMillis();
+            }
+        } catch (Exception e) {
+            LOG.error("storm metrics failed! ", e);
+        }
+    }
+
+    public void close() {
+        dataWriter.close();
+    }
+
+    boolean updateStats(PrintWriter writer)
+            throws Exception {
+        if (collectTopologyStats) {
+            updateTopologyStats();
+        }
+        if (collectExecutorStats) {
+            updateExecutorStats();
+        }
+        return true;
+    }
+
+    void updateTopologyStats() {
+        long timeTotal = System.currentTimeMillis() - startTime;
+        int numWorkers = this.curSample.getNumWorkers();
+        int numExecutors = this.curSample.getNumExecutors();
+        int numTasks = this.curSample.getNumTasks();
+        metrics.put(TIME, String.format(TIME_FORMAT, timeTotal / 1000));
+        metrics.put(WORKERS, Integer.toString(numWorkers));
+        metrics.put(EXECUTORS, Integer.toString(numExecutors));
+        metrics.put(TASKS, Integer.toString(numTasks));
+    }
+
+    void updateExecutorStats() {
+        long timeDiff = this.curSample.getSampleTime() - this.lastSample.getSampleTime();
+        long transferredDiff = this.curSample.getTotalTransferred() - this.lastSample.getTotalTransferred();
+        long throughput = transferredDiff / (timeDiff / 1000);
+
+        long spoutDiff = this.curSample.getSpoutTransferred() - this.lastSample.getSpoutTransferred();
+        long spoutAckedDiff = this.curSample.getTotalAcked() - this.lastSample.getTotalAcked();
+        long spoutThroughput = spoutDiff / (timeDiff / 1000);
+
+        if (collectThroughput) {
+            metrics.put(TRANSFERRED, Long.toString(transferredDiff));
+            metrics.put(XSFER_RATE, Long.toString(throughput));
+        }
+
+        if (collectSpoutThroughput) {
+
+            metrics.put(SPOUT_EXECUTORS, Integer.toString(this.curSample.getSpoutExecutors()));
+            metrics.put(SPOUT_TRANSFERRED, Long.toString(spoutDiff));
+            metrics.put(SPOUT_ACKED, Long.toString(spoutAckedDiff));
+            metrics.put(SPOUT_THROUGHPUT, Long.toString(spoutThroughput));
+        }
+
+
+        if (collectSpoutLatency) {
+            double latency = this.curSample.getTotalLatency();
+            if (latency > this.maxLatency) {
+                this.maxLatency = latency;
+            }
+            metrics.put(SPOUT_AVG_COMPLETE_LATENCY,
+                    String.format(SPOUT_AVG_LATENCY_FORMAT, latency));
+            metrics.put(SPOUT_MAX_COMPLETE_LATENCY,
+                    String.format(SPOUT_MAX_LATENCY_FORMAT, this.maxLatency));
+
+        }
+    }
+
+
+    void writeHeader(PrintWriter writer) {
+        header.add(TIME);
+        if (collectTopologyStats) {
+            header.add(WORKERS);
+            header.add(TASKS);
+            header.add(EXECUTORS);
+        }
+
+        if (collectThroughput) {
+            header.add(TRANSFERRED);
+            header.add(XSFER_RATE);
+        }
+
+        if (collectSpoutThroughput) {
+            header.add(SPOUT_EXECUTORS);
+            header.add(SPOUT_TRANSFERRED);
+            header.add(SPOUT_ACKED);
+            header.add(SPOUT_THROUGHPUT);
+        }
+
+        if (collectSpoutLatency) {
+            header.add(SPOUT_AVG_COMPLETE_LATENCY);
+            header.add(SPOUT_MAX_COMPLETE_LATENCY);
+        }
+
+        writer.println("\n------------------------------------------------------------------------------------------------------------------");
+        String str = Utils.join(header, ",");
+        writer.println(str);
+        writer.println("------------------------------------------------------------------------------------------------------------------");
+        writer.flush();
+    }
+
+    void writeLine(PrintWriter writer) {
+        List<String> line = new LinkedList<String>();
+        for (String h : header) {
+            line.add(metrics.get(h));
+        }
+        String str = Utils.join(line, ",");
+        writer.println(str);
+        writer.flush();
+    }
+
+
+    boolean collectTopologyStats(Set<MetricsItem> items) {
+        return items.contains(MetricsItem.ALL) ||
+                items.contains(MetricsItem.TOPOLOGY_STATS);
+    }
+
+    boolean collectExecutorStats(Set<MetricsItem> items) {
+        return items.contains(MetricsItem.ALL) ||
+                items.contains(MetricsItem.XSFER_RATE) ||
+                items.contains(MetricsItem.SPOUT_LATENCY);
+    }
+
+    boolean collectThroughput(Set<MetricsItem> items) {
+        return items.contains(MetricsItem.ALL) ||
+                items.contains(MetricsItem.XSFER_RATE);
+    }
+
+    boolean collectSpoutThroughput(Set<MetricsItem> items) {
+        return items.contains(MetricsItem.ALL) ||
+                items.contains(MetricsItem.SPOUT_THROUGHPUT);
+    }
+
+    boolean collectSpoutLatency(Set<MetricsItem> items) {
+        return items.contains(MetricsItem.ALL) ||
+                items.contains(MetricsItem.SPOUT_LATENCY);
+    }
+
+
+
+    public static class MetricsCollectorConfig {
+        private static final Logger LOG = Logger.getLogger(MetricsCollectorConfig.class);
+
+        // storm configuration
+        public final Map stormConfig;
+        // storm topology name
+        public final String name;
+        // benchmark label
+        public final String label;
+
+        public MetricsCollectorConfig(String topoName, Map stormConfig) {
+            this.stormConfig = stormConfig;
+            String labelStr = (String) stormConfig.get("benchmark.label");
+            this.name = topoName;
+            if (labelStr == null) {
+                LOG.warn("'benchmark.label' not found in config. Defaulting to topology name");
+                labelStr = this.name;
+            }
+            this.label = labelStr;
+        }
+    } // MetricsCollectorConfig
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java
new file mode 100755
index 0000000..8bcd84f
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java
@@ -0,0 +1,131 @@
+/*
+ * 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 org.apache.storm.perf.utils;
+
+import org.apache.storm.Config;
+import org.apache.storm.LocalCluster;
+import org.apache.storm.StormSubmitter;
+import org.apache.storm.generated.KillOptions;
+import org.apache.storm.generated.Nimbus;
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.utils.NimbusClient;
+import org.apache.storm.utils.Utils;
+
+import java.util.Map;
+
+
+public class Helper {
+
+  public static void kill(Nimbus.Client client, String topoName) throws Exception {
+    KillOptions opts = new KillOptions();
+    opts.set_wait_secs(0);
+    client.killTopologyWithOpts(topoName, opts);
+  }
+
+  public static void killAndShutdownCluster(LocalCluster cluster, String topoName) throws Exception {
+    KillOptions opts = new KillOptions();
+    opts.set_wait_secs(0);
+    cluster.killTopologyWithOpts(topoName, opts);
+    cluster.shutdown();
+  }
+
+
+    public static LocalCluster runOnLocalCluster(String topoName, StormTopology topology) throws Exception {
+        LocalCluster cluster = new LocalCluster();
+        cluster.submitTopology(topoName, new Config(), topology);
+        return cluster;
+    }
+
+    public static int getInt(Map map, Object key, int def) {
+        return Utils.getInt(Utils.get(map, key, def));
+    }
+
+    public static String getStr(Map map, Object key) {
+        return (String) map.get(key);
+    }
+
+    public static void collectMetricsAndKill(String topologyName, Integer pollInterval, Integer duration) throws Exception {
+        Map clusterConf = Utils.readStormConfig();
+        Nimbus.Client client = NimbusClient.getConfiguredClient(clusterConf).getClient();
+        BasicMetricsCollector metricsCollector = new BasicMetricsCollector(client, topologyName, clusterConf);
+
+        int times = duration / pollInterval;
+        metricsCollector.collect(client);
+        for (int i = 0; i < times; i++) {
+            Thread.sleep(pollInterval * 1000);
+            metricsCollector.collect(client);
+        }
+        metricsCollector.close();
+        kill(client, topologyName);
+    }
+
+    public static void collectLocalMetricsAndKill(LocalCluster localCluster, String topologyName, Integer pollInterval, Integer duration, Map clusterConf) throws Exception {
+        BasicMetricsCollector metricsCollector = new BasicMetricsCollector(localCluster, topologyName, clusterConf);
+
+        int times = duration / pollInterval;
+        metricsCollector.collect(localCluster);
+        for (int i = 0; i < times; i++) {
+            Thread.sleep(pollInterval * 1000);
+            metricsCollector.collect(localCluster);
+        }
+        metricsCollector.close();
+        killAndShutdownCluster(localCluster, topologyName);
+    }
+
+    /** Kill topo and Shutdown local cluster on Ctrl-C */
+  public static void setupShutdownHook(final LocalCluster cluster, final String topoName) {
+    Runtime.getRuntime().addShutdownHook(new Thread() {
+      public void run() {
+          try {
+              cluster.killTopology(topoName);
+              System.out.println("Killed Topology");
+          } catch (Exception e) {
+              System.err.println("Encountered error in killing topology: " + e);
+          }
+        cluster.shutdown();
+      }
+    });
+  }
+
+  /** Kill topo on Ctrl-C */
+  public static void setupShutdownHook(final String topoName) {
+    Map clusterConf = Utils.readStormConfig();
+    final Nimbus.Client client = NimbusClient.getConfiguredClient(clusterConf).getClient();
+    Runtime.getRuntime().addShutdownHook(new Thread() {
+      public void run() {
+        try {
+          Helper.kill(client, topoName);
+          System.out.println("Killed Topology");
+        } catch (Exception e) {
+          e.printStackTrace();
+        }
+      }
+    });
+  }
+
+    public static void runOnClusterAndPrintMetrics(Integer durationSec, String topoName, Map topoConf, StormTopology topology) throws Exception {
+      // submit topology
+      StormSubmitter.submitTopologyWithProgressBar(topoName, topoConf, topology);
+      setupShutdownHook(topoName); // handle Ctrl-C
+
+      // poll metrics every minute, then kill topology after specified duration
+      Integer pollIntervalSec = 60;
+      collectMetricsAndKill(topoName, pollIntervalSec, durationSec);
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java
new file mode 100755
index 0000000..396ad53
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java
@@ -0,0 +1,51 @@
+/*
+ * 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 org.apache.storm.perf.utils;
+
+
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichBolt;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.tuple.Values;
+
+import java.util.Map;
+
+
+public class IdentityBolt extends BaseRichBolt {
+    private OutputCollector collector;
+
+    @Override
+    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
+        this.collector = collector;
+    }
+
+    @Override
+    public void execute(Tuple tuple) {
+        collector.emit(tuple, tuple.getValues() );
+        collector.ack(tuple);
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java
new file mode 100755
index 0000000..a934120
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java
@@ -0,0 +1,248 @@
+/*
+ * 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 org.apache.storm.perf.utils;
+
+import org.apache.storm.LocalCluster;
+import org.apache.storm.generated.ClusterSummary;
+import org.apache.storm.generated.ExecutorSpecificStats;
+import org.apache.storm.generated.ExecutorStats;
+import org.apache.storm.generated.ExecutorSummary;
+import org.apache.storm.generated.Nimbus;
+import org.apache.storm.generated.SpoutStats;
+import org.apache.storm.generated.TopologyInfo;
+import org.apache.storm.generated.TopologySummary;
+import org.apache.storm.utils.Utils;
+
+import java.util.List;
+import java.util.Map;
+
+public class MetricsSample {
+
+    private long sampleTime = -1;
+    private long totalTransferred = 0l;
+    private long totalEmitted = 0l;
+    private long totalAcked = 0l;
+    private long totalFailed = 0l;
+
+    private double totalLatency;
+
+    private long spoutEmitted = 0l;
+    private long spoutTransferred = 0l;
+    private int spoutExecutors = 0;
+
+    private int numSupervisors = 0;
+    private int numWorkers = 0;
+    private int numTasks = 0;
+    private int numExecutors = 0;
+
+    private int totalSlots = 0;
+    private int usedSlots = 0;
+
+    public static MetricsSample factory(Nimbus.Client client, String topologyName) throws Exception {
+        // "************ Sampling Metrics *****************
+
+        ClusterSummary clusterSummary = client.getClusterInfo();
+        // get topology info
+        TopologySummary topSummary = getTopologySummary(clusterSummary, topologyName);
+        int topologyExecutors = topSummary.get_num_executors();
+        int topologyWorkers = topSummary.get_num_workers();
+        int topologyTasks = topSummary.get_num_tasks();
+        TopologyInfo topInfo = client.getTopologyInfo(topSummary.get_id());
+
+        MetricsSample sample =  getMetricsSample( topInfo);
+        sample.numWorkers = topologyWorkers;
+        sample.numExecutors = topologyExecutors;
+        sample.numTasks = topologyTasks;
+        return sample;
+    }
+
+    public static MetricsSample factory(LocalCluster localCluster, String topologyName) throws Exception {
+        TopologyInfo topologyInfo = localCluster.getTopologyInfo(topologyName);;
+        return getMetricsSample(topologyInfo);
+    }
+
+
+    private static MetricsSample getMetricsSample(TopologyInfo topInfo) {
+        List<ExecutorSummary> executorSummaries = topInfo.get_executors();
+
+        // totals
+        long totalTransferred = 0l;
+        long totalEmitted = 0l;
+        long totalAcked = 0l;
+        long totalFailed = 0l;
+
+        // number of spout executors
+        int spoutExecCount = 0;
+        double spoutLatencySum = 0.0;
+
+        long spoutEmitted = 0l;
+        long spoutTransferred = 0l;
+
+        // Executor summaries
+        for(ExecutorSummary executorSummary : executorSummaries){
+            ExecutorStats execuatorStats = executorSummary.get_stats();
+            if(execuatorStats == null){
+                continue;
+            }
+
+            ExecutorSpecificStats executorSpecificStats = execuatorStats.get_specific();
+            if(executorSpecificStats == null){
+                // bail out
+                continue;
+            }
+
+            // transferred totals
+            Map<String,Map<String,Long>> transferred = execuatorStats.get_transferred();
+            Map<String, Long> txMap = transferred.get(":all-time");
+            if(txMap == null){
+                continue;
+            }
+            for(String key : txMap.keySet()){
+                // todo, ignore the master batch coordinator ?
+                if(!Utils.isSystemId(key)){
+                    Long count = txMap.get(key);
+                    totalTransferred += count;
+                    if(executorSpecificStats.is_set_spout()){
+                        spoutTransferred += count;
+                    }
+                }
+            }
+
+            // we found a spout
+            if(executorSpecificStats.isSet(2)) { // spout
+
+                SpoutStats spoutStats = executorSpecificStats.get_spout();
+                Map<String, Long> acked = spoutStats.get_acked().get(":all-time");
+                if(acked != null){
+                    for(String key : acked.keySet()) {
+                        totalAcked += acked.get(key);
+                    }
+                }
+
+                Map<String, Long> failed = spoutStats.get_failed().get(":all-time");
+                if(failed != null){
+                    for(String key : failed.keySet()) {
+                        totalFailed += failed.get(key);
+                    }
+                }
+
+                Double total = 0d;
+                Map<String, Double> vals = spoutStats.get_complete_ms_avg().get(":all-time");
+                for(String key : vals.keySet()){
+                    total += vals.get(key);
+                }
+                Double latency = total / vals.size();
+
+                spoutExecCount++;
+                spoutLatencySum += latency;
+            }
+
+
+        } // end executor summary
+
+        MetricsSample ret = new MetricsSample();
+        ret.totalEmitted = totalEmitted;
+        ret.totalTransferred = totalTransferred;
+        ret.totalAcked  = totalAcked;
+        ret.totalFailed = totalFailed;
+        ret.totalLatency = spoutLatencySum/spoutExecCount;
+        ret.spoutEmitted = spoutEmitted;
+        ret.spoutTransferred = spoutTransferred;
+        ret.sampleTime = System.currentTimeMillis();
+//        ret.numSupervisors = clusterSummary.get_supervisors_size();
+        ret.numWorkers = 0;
+        ret.numExecutors = 0;
+        ret.numTasks = 0;
+        ret.spoutExecutors = spoutExecCount;
+        return ret;
+    }
+
+    public static TopologySummary getTopologySummary(ClusterSummary cs, String name) {
+        for (TopologySummary ts : cs.get_topologies()) {
+            if (name.equals(ts.get_name())) {
+                return ts;
+            }
+        }
+        return null;
+    }
+
+
+
+    // getters
+    public long getSampleTime() {
+        return sampleTime;
+    }
+
+    public long getTotalTransferred() {
+        return totalTransferred;
+    }
+
+    public long getTotalEmitted() {
+        return totalEmitted;
+    }
+
+    public long getTotalAcked() {
+        return totalAcked;
+    }
+
+    public long getTotalFailed() {
+        return totalFailed;
+    }
+
+    public double getTotalLatency() {
+        return totalLatency;
+    }
+
+    public long getSpoutEmitted() {
+        return spoutEmitted;
+    }
+
+    public long getSpoutTransferred() {
+        return spoutTransferred;
+    }
+
+    public int getNumSupervisors() {
+        return numSupervisors;
+    }
+
+    public int getNumWorkers() {
+        return numWorkers;
+    }
+
+    public int getNumTasks() {
+        return numTasks;
+    }
+
+    public int getTotalSlots() {
+        return totalSlots;
+    }
+
+    public int getSpoutExecutors(){
+        return this.spoutExecutors;
+    }
+
+    public int getNumExecutors() {
+        return this.numExecutors;
+    }
+
+    public int getUsedSlots() {
+        return this.usedSlots;
+    }
+
+}
\ No newline at end of file


[03/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/conf/KafkaHdfsTopo.yaml
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/conf/KafkaHdfsTopo.yaml b/storm-perf/src/main/conf/KafkaHdfsTopo.yaml
deleted file mode 100755
index a8ed2f2..0000000
--- a/storm-perf/src/main/conf/KafkaHdfsTopo.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-# 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.
-
-spout.count : 1
-bolt.count : 1
-kafka.topic : "kafka_topic"
-zk.uri : "zkhostname:2181"
-hdfs.uri : "hdfs://hdfs.namenode:8020"
-hdfs.dir : "/tmp/storm"
-hdfs.batch : 1000
-
-# storm config overrides
-topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml b/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml
deleted file mode 100644
index cde4c2e..0000000
--- a/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-# 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.
-
-spout.count : 1
-bolt.count : 1
-kafka.topic : "kafka_topic"
-zk.uri : "zkhostname:2181"
-
-# storm config overrides
-topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml b/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml
deleted file mode 100644
index d16431b..0000000
--- a/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-# 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.
-
-spout.count : 1
-bolt.count : 1
-hdfs.uri : "hdfs://hdfs.namenode:8020"
-hdfs.dir : "/tmp/storm"
-hdfs.batch : 1000
-
-
-# storm config overrides
-topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java
deleted file mode 100644
index 11c63d3..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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 org.apache.storm.perf;
-
-import org.apache.storm.Config;
-import org.apache.storm.LocalCluster;
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.perf.bolt.DevNullBolt;
-import org.apache.storm.perf.bolt.IdBolt;
-import org.apache.storm.perf.spout.ConstSpout;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.utils.Utils;
-
-import java.util.Map;
-
-/**
- * ConstSpout -> IdBolt -> DevNullBolt
- * This topology measures speed of messaging between spouts->bolt  and  bolt->bolt
- *   ConstSpout : Continuously emits a constant string
- *   IdBolt : clones and emits input tuples
- *   DevNullBolt : discards incoming tuples
- */
-public class ConstSpoutIdBoltNullBoltTopo {
-
-    public static final String TOPOLOGY_NAME = "ConstSpoutIdBoltNullBoltTopo";
-    public static final String SPOUT_ID = "constSpout";
-    public static final String BOLT1_ID = "idBolt";
-    public static final String BOLT2_ID = "nullBolt";
-
-    // Configs
-    public static final String BOLT1_COUNT = "bolt1.count";
-    public static final String BOLT2_COUNT = "bolt2.count";
-    public static final String SPOUT_COUNT = "spout.count";
-
-    public static StormTopology getTopology(Map conf) {
-
-        // 1 -  Setup Spout   --------
-        ConstSpout spout = new ConstSpout("some data").withOutputFields("str");
-
-        // 2 -  Setup IdBolt & DevNullBolt   --------
-        IdBolt bolt1 = new IdBolt();
-        DevNullBolt bolt2 = new DevNullBolt();
-
-
-        // 3 - Setup Topology  --------
-        TopologyBuilder builder = new TopologyBuilder();
-
-        builder.setSpout(SPOUT_ID, spout,  Helper.getInt(conf, SPOUT_COUNT, 1) );
-
-        builder.setBolt(BOLT1_ID, bolt1, Helper.getInt(conf, BOLT1_COUNT, 1))
-                .localOrShuffleGrouping(SPOUT_ID);
-
-        builder.setBolt(BOLT2_ID, bolt2, Helper.getInt(conf, BOLT2_COUNT, 1))
-                .localOrShuffleGrouping(BOLT1_ID);
-
-        return builder.createTopology();
-    }
-
-
-    public static void main(String[] args) throws Exception {
-
-        if (args.length <= 0) {
-            // submit to local cluster
-            Config conf = new Config();
-            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(conf));
-
-            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
-            while (true) {//  run indefinitely till Ctrl-C
-                Thread.sleep(20_000_000);
-            }
-        } else {
-            // submit to real cluster
-            if (args.length >2) {
-                System.err.println("args: runDurationSec  [optionalConfFile]");
-                return;
-            }
-            Integer durationSec = Integer.parseInt(args[0]);
-            Map topoConf =  (args.length==2) ? Utils.findAndReadConfigFile(args[1])  : new Config();
-
-            //  Submit topology to storm cluster
-            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java
deleted file mode 100755
index 92c2787..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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 org.apache.storm.perf;
-
-import org.apache.storm.Config;
-import org.apache.storm.LocalCluster;
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.perf.bolt.DevNullBolt;
-import org.apache.storm.perf.spout.ConstSpout;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.BoltDeclarer;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.utils.Utils;
-
-import java.util.Map;
-
-/***
- * This topo helps measure the messaging speed between a spout and a bolt.
- *  Spout generates a stream of a fixed string.
- *  Bolt will simply ack and discard the tuple received
- */
-
-public class ConstSpoutNullBoltTopo {
-
-    public static final String TOPOLOGY_NAME = "ConstSpoutNullBoltTopo";
-    public static final String SPOUT_ID = "constSpout";
-    public static final String BOLT_ID = "nullBolt";
-
-    // Configs
-    public static final String BOLT_COUNT = "bolt.count";
-    public static final String SPOUT_COUNT = "spout.count";
-    public static final String GROUPING = "grouping"; // can be 'local' or 'shuffle'
-
-    public static final String LOCAL_GROPING = "local";
-    public static final String SHUFFLE_GROUPING = "shuffle";
-    public static final String DEFAULT_GROUPING = LOCAL_GROPING;
-
-    public static StormTopology getTopology(Map conf) {
-
-        // 1 -  Setup Spout   --------
-        ConstSpout spout = new ConstSpout("some data").withOutputFields("str");
-
-        // 2 -  Setup DevNull Bolt   --------
-        DevNullBolt bolt = new DevNullBolt();
-
-
-        // 3 - Setup Topology  --------
-        TopologyBuilder builder = new TopologyBuilder();
-
-        builder.setSpout(SPOUT_ID, spout,  Helper.getInt(conf, SPOUT_COUNT, 1) );
-        BoltDeclarer bd = builder.setBolt(BOLT_ID, bolt, Helper.getInt(conf, BOLT_COUNT, 1));
-
-        String groupingType = Helper.getStr(conf, GROUPING);
-        if(groupingType==null || groupingType.equalsIgnoreCase(DEFAULT_GROUPING) )
-            bd.localOrShuffleGrouping(SPOUT_ID);
-        else if(groupingType.equalsIgnoreCase(SHUFFLE_GROUPING) )
-            bd.shuffleGrouping(SPOUT_ID);
-        return builder.createTopology();
-    }
-
-    /**
-     * ConstSpout -> DevNullBolt with configurable grouping (default localOrShuffle)
-     */
-    public static void main(String[] args) throws Exception {
-
-        if(args.length <= 0) {
-            // For IDE based profiling ... submit topology to local cluster
-            Config conf = new Config();
-            final LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(conf));
-
-            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
-            while (true) {//  run indefinitely till Ctrl-C
-                Thread.sleep(20_000_000);
-            }
-
-        } else {
-            // For measuring perf against a Storm cluster
-            if (args.length > 2) {
-                System.err.println("args: runDurationSec  [optionalConfFile]");
-                return;
-            }
-            Integer durationSec = Integer.parseInt(args[0]);
-            Map topoConf =  (args.length==2) ? Utils.findAndReadConfigFile(args[1])  : new Config();
-
-            //  Submit topology to storm cluster
-            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
-        }
-    }
-
-}
-

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java
deleted file mode 100755
index 721ae3d..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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 org.apache.storm.perf;
-
-import org.apache.storm.Config;
-import org.apache.storm.LocalCluster;
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.perf.spout.ConstSpout;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.TopologyBuilder;
-
-
-/***
- * This topo helps measure how fast a spout can produce data (so no bolts are attached)
- *  Spout generates a stream of a fixed string.
- */
-
-public class ConstSpoutOnlyTopo {
-
-    public static final String TOPOLOGY_NAME = "ConstSpoutOnlyTopo";
-    public static final String SPOUT_ID = "constSpout";
-
-
-    public static StormTopology getTopology() {
-
-        // 1 -  Setup Const Spout   --------
-        ConstSpout spout = new ConstSpout("some data").withOutputFields("str");
-
-        // 2 - Setup Topology  --------
-        TopologyBuilder builder = new TopologyBuilder();
-        builder.setSpout(SPOUT_ID, spout, 1);
-        return builder.createTopology();
-    }
-
-    /**
-     * ConstSpout only topology  (No bolts)
-     */
-    public static void main(String[] args) throws Exception {
-        if(args.length <= 0) {
-            // For IDE based profiling ... submit topology to local cluster
-            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology());
-
-            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
-            while (true) {//  run indefinitely till Ctrl-C
-                Thread.sleep(20_000_000);
-            }
-        } else {
-            //  Submit topology to storm cluster
-            if (args.length != 1) {
-                System.err.println("args: runDurationSec");
-                return;
-            }
-            Integer durationSec = Integer.parseInt(args[0]);
-
-            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, new Config(), getTopology());
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java
deleted file mode 100644
index d518c86..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-* 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 org.apache.storm.perf;
-
-
-import org.apache.storm.Config;
-import org.apache.storm.LocalCluster;
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.perf.bolt.CountBolt;
-import org.apache.storm.perf.bolt.SplitSentenceBolt;
-import org.apache.storm.perf.spout.FileReadSpout;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.utils.Utils;
-
-
-import java.util.Map;
-
-/***
- * This topo helps measure speed of word count.
- *  Spout loads a file into memory on initialization, then emits the lines in an endless loop.
- */
-
-public class FileReadWordCountTopo {
-    public static final String SPOUT_ID =   "spout";
-    public static final String COUNT_ID =   "counter";
-    public static final String SPLIT_ID =   "splitter";
-    public static final String TOPOLOGY_NAME = "FileReadWordCountTopo";
-
-    // Config settings
-    public static final String SPOUT_NUM =  "spout.count";
-    public static final String SPLIT_NUM =  "splitter.count";
-    public static final String COUNT_NUM =  "counter.count";
-    public static final String INPUT_FILE = "input.file";
-
-    public static final int DEFAULT_SPOUT_NUM = 1;
-    public static final int DEFAULT_SPLIT_BOLT_NUM = 2;
-    public static final int DEFAULT_COUNT_BOLT_NUM = 2;
-
-
-    public static StormTopology getTopology(Map config) {
-
-        final int spoutNum = Helper.getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
-        final int spBoltNum = Helper.getInt(config, SPLIT_NUM, DEFAULT_SPLIT_BOLT_NUM);
-        final int cntBoltNum = Helper.getInt(config, COUNT_NUM, DEFAULT_COUNT_BOLT_NUM);
-        final String inputFile = Helper.getStr(config, INPUT_FILE);
-
-        TopologyBuilder builder = new TopologyBuilder();
-        builder.setSpout(SPOUT_ID, new FileReadSpout(inputFile), spoutNum);
-        builder.setBolt(SPLIT_ID, new SplitSentenceBolt(), spBoltNum).localOrShuffleGrouping(SPOUT_ID);
-        builder.setBolt(COUNT_ID, new CountBolt(), cntBoltNum).fieldsGrouping(SPLIT_ID, new Fields(SplitSentenceBolt.FIELDS));
-
-        return builder.createTopology();
-    }
-
-    public static void main(String[] args) throws Exception {
-        if(args.length <= 0) {
-            // For IDE based profiling ... submit topology to local cluster
-            Config conf = new Config();
-            conf.put(INPUT_FILE, "resources/randomwords.txt");
-            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(conf));
-
-            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
-            while (true) {//  run indefinitely till Ctrl-C
-                Thread.sleep(20_000_000);
-            }
-        } else {
-            //  Submit to Storm cluster
-            if (args.length !=2) {
-                System.err.println("args: runDurationSec  confFile");
-                return;
-            }
-            Integer durationSec = Integer.parseInt(args[0]);
-            Map topoConf = Utils.findAndReadConfigFile(args[1]);
-
-            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
-
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java
deleted file mode 100644
index 248b523..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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 org.apache.storm.perf;
-
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.hdfs.spout.HdfsSpout;
-import org.apache.storm.hdfs.spout.TextFileReader;
-import org.apache.storm.perf.bolt.DevNullBolt;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.utils.Utils;
-
-import java.util.Map;
-
-/***
- * This topo helps measure speed of reading from Hdfs.
- *  Spout Reads from Hdfs.
- *  Bolt acks and discards tuples
- */
-
-
-public class HdfsSpoutNullBoltTopo {
-    // names
-    static final String TOPOLOGY_NAME = "HdfsSpoutNullBoltTopo";
-    static final String SPOUT_ID = "hdfsSpout";
-    static final String BOLT_ID = "devNullBolt";
-
-    // configs
-    static final String SPOUT_NUM = "spout.count";
-    static final String BOLT_NUM = "bolt.count";
-
-    static final String HDFS_URI    = "hdfs.uri";
-    static final String SOURCE_DIR  = "hdfs.source.dir";
-    static final String ARCHIVE_DIR = "hdfs.archive.dir";
-    static final String BAD_DIR     = "hdfs.bad.dir";
-
-    public static final int DEFAULT_SPOUT_NUM = 1;
-    public static final int DEFAULT_BOLT_NUM = 1;
-
-
-    public static StormTopology getTopology(Map config) {
-
-        final int spoutNum = Helper.getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
-        final int boltNum = Helper.getInt(config, BOLT_NUM, DEFAULT_BOLT_NUM);
-        final String fileFormat = Helper.getStr(config, "text");
-        final String hdfsUri = Helper.getStr(config, HDFS_URI);
-        final String sourceDir = Helper.getStr(config, SOURCE_DIR);
-        final String archiveDir = Helper.getStr(config, ARCHIVE_DIR);
-        final String badDir = Helper.getStr(config, BAD_DIR);
-
-
-        // 1 -  Setup Hdfs Spout   --------
-        HdfsSpout spout = new HdfsSpout()
-                .setReaderType(fileFormat)
-                .setHdfsUri(hdfsUri)
-                .setSourceDir(sourceDir)
-                .setArchiveDir(archiveDir)
-                .setBadFilesDir(badDir)
-                .withOutputFields(TextFileReader.defaultFields);
-
-        // 2 -   DevNull Bolt   --------
-        DevNullBolt bolt = new DevNullBolt();
-
-        // 3 - Setup Topology  --------
-        TopologyBuilder builder = new TopologyBuilder();
-        builder.setSpout(SPOUT_ID, spout, spoutNum);
-        builder.setBolt(BOLT_ID, bolt, boltNum)
-                .localOrShuffleGrouping(SPOUT_ID);
-
-        return builder.createTopology();
-    }
-
-    public static void main(String[] args) throws Exception {
-        if (args.length != 2) {
-            System.err.println("args: runDurationSec topConfFile");
-            return;
-        }
-
-        Integer durationSec = Integer.parseInt(args[0]);
-        Map topoConf = Utils.findAndReadConfigFile(args[1]);
-
-        // Submit to Storm cluster
-        Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java
deleted file mode 100755
index 4293aac..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * 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 org.apache.storm.perf;
-
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.hdfs.bolt.HdfsBolt;
-import org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat;
-import org.apache.storm.hdfs.bolt.format.FileNameFormat;
-import org.apache.storm.hdfs.bolt.format.RecordFormat;
-import org.apache.storm.hdfs.bolt.rotation.FileRotationPolicy;
-import org.apache.storm.hdfs.bolt.rotation.FileSizeRotationPolicy;
-import org.apache.storm.hdfs.bolt.sync.CountSyncPolicy;
-import org.apache.storm.hdfs.bolt.sync.SyncPolicy;
-import org.apache.storm.kafka.BrokerHosts;
-import org.apache.storm.kafka.KafkaSpout;
-import org.apache.storm.kafka.SpoutConfig;
-import org.apache.storm.kafka.StringMultiSchemeWithTopic;
-import org.apache.storm.kafka.ZkHosts;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.utils.Utils;
-
-import java.util.Map;
-import java.util.UUID;
-
-/***
- * This topo helps measure speed of reading from Kafka and writing to Hdfs.
- *  Spout Reads from Kafka.
- *  Bolt writes to Hdfs
- */
-
-public class KafkaHdfsTopo {
-
-  // configs - topo parallelism
-  public static final String SPOUT_NUM = "spout.count";
-  public static final String BOLT_NUM = "bolt.count";
-  // configs - kafka spout
-  public static final String KAFKA_TOPIC = "kafka.topic";
-  public static final String ZOOKEEPER_URI = "zk.uri";
-  // configs - hdfs bolt
-  public static final String HDFS_URI = "hdfs.uri";
-  public static final String HDFS_PATH = "hdfs.dir";
-  public static final String HDFS_BATCH = "hdfs.batch";
-
-
-  public static final int DEFAULT_SPOUT_NUM = 1;
-  public static final int DEFAULT_BOLT_NUM = 1;
-  public static final int DEFAULT_HDFS_BATCH = 1000;
-
-  // names
-  public static final String TOPOLOGY_NAME = "KafkaHdfsTopo";
-  public static final String SPOUT_ID = "kafkaSpout";
-  public static final String BOLT_ID = "hdfsBolt";
-
-
-
-  public static StormTopology getTopology(Map config) {
-
-    final int spoutNum = getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
-    final int boltNum = getInt(config, BOLT_NUM, DEFAULT_BOLT_NUM);
-
-    final int hdfsBatch = getInt(config, HDFS_BATCH, DEFAULT_HDFS_BATCH);
-
-    // 1 -  Setup Kafka Spout   --------
-    String zkConnString = getStr(config, ZOOKEEPER_URI);
-    String topicName = getStr(config, KAFKA_TOPIC);
-
-    BrokerHosts brokerHosts = new ZkHosts(zkConnString);
-    SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, topicName, "/" + topicName, UUID.randomUUID().toString());
-    spoutConfig.scheme = new StringMultiSchemeWithTopic();
-    spoutConfig.ignoreZkOffsets = true;
-
-    KafkaSpout spout = new KafkaSpout(spoutConfig);
-
-    // 2 -  Setup HFS Bolt   --------
-    String Hdfs_url = getStr(config, HDFS_URI);
-    RecordFormat format = new LineWriter("str");
-    SyncPolicy syncPolicy = new CountSyncPolicy(hdfsBatch);
-    FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy(1.0f, FileSizeRotationPolicy.Units.GB);
-
-    FileNameFormat fileNameFormat = new DefaultFileNameFormat().withPath(getStr(config,HDFS_PATH) );
-
-    // Instantiate the HdfsBolt
-    HdfsBolt bolt = new HdfsBolt()
-            .withFsUrl(Hdfs_url)
-            .withFileNameFormat(fileNameFormat)
-            .withRecordFormat(format)
-            .withRotationPolicy(rotationPolicy)
-            .withSyncPolicy(syncPolicy);
-
-
-    // 3 - Setup Topology  --------
-    TopologyBuilder builder = new TopologyBuilder();
-    builder.setSpout(SPOUT_ID, spout, spoutNum);
-    builder.setBolt(BOLT_ID, bolt, boltNum)
-            .localOrShuffleGrouping(SPOUT_ID);
-
-    return builder.createTopology();
-  }
-
-
-  public static int getInt(Map map, Object key, int def) {
-    return Utils.getInt(Utils.get(map, key, def));
-  }
-
-  public static String getStr(Map map, Object key) {
-    return (String) map.get(key);
-  }
-
-
-    /** Copies text file content from sourceDir to destinationDir. Moves source files into sourceDir after its done consuming */
-    public static void main(String[] args) throws Exception {
-
-        if (args.length != 2) {
-            System.err.println("args: runDurationSec topConfFile");
-            return;
-        }
-
-        Integer durationSec = Integer.parseInt(args[0]);
-        String confFile = args[1];
-        Map topoConf = Utils.findAndReadConfigFile(confFile);
-
-        //  Submit topology to Storm cluster
-        Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
-    }
-
-    public static class LineWriter implements RecordFormat {
-        private String lineDelimiter = System.lineSeparator();
-        private String fieldName;
-
-        public LineWriter(String fieldName) {
-            this.fieldName = fieldName;
-        }
-
-        /**
-         * Overrides the default record delimiter.
-         *
-         * @param delimiter
-         * @return
-         */
-        public LineWriter withLineDelimiter(String delimiter){
-            this.lineDelimiter = delimiter;
-            return this;
-        }
-
-        @Override
-        public byte[] format(Tuple tuple) {
-            return (tuple.getValueByField(fieldName).toString() +  this.lineDelimiter).getBytes();
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java
deleted file mode 100755
index 3512c65..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-* 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 org.apache.storm.perf;
-
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.kafka.BrokerHosts;
-import org.apache.storm.kafka.KafkaSpout;
-import org.apache.storm.kafka.SpoutConfig;
-import org.apache.storm.kafka.StringMultiSchemeWithTopic;
-import org.apache.storm.kafka.ZkHosts;
-import org.apache.storm.perf.bolt.DevNullBolt;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.utils.Utils;
-
-import java.util.Map;
-import java.util.UUID;
-
-
-/***
- * This topo helps measure speed of reading from Kafka
- *   Spout Reads from Kafka.
- *   Bolt acks and discards tuples
- */
-
-public class KafkaSpoutNullBoltTopo {
-
-    // configs - topo parallelism
-    public static final String SPOUT_NUM = "spout.count";
-    public static final String BOLT_NUM = "bolt.count";
-
-    // configs - kafka spout
-    public static final String KAFKA_TOPIC = "kafka.topic";
-    public static final String ZOOKEEPER_URI = "zk.uri";
-
-
-    public static final int DEFAULT_SPOUT_NUM = 1;
-    public static final int DEFAULT_BOLT_NUM = 1;
-
-    // names
-    public static final String TOPOLOGY_NAME = "KafkaSpoutNullBoltTopo";
-    public static final String SPOUT_ID = "kafkaSpout";
-    public static final String BOLT_ID = "devNullBolt";
-
-
-    public static StormTopology getTopology(Map config) {
-
-        final int spoutNum = getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
-        final int boltNum = getInt(config, BOLT_NUM, DEFAULT_BOLT_NUM);
-        // 1 -  Setup Kafka Spout   --------
-
-        String zkConnString = getStr(config, ZOOKEEPER_URI);
-        String topicName = getStr(config, KAFKA_TOPIC);
-
-        BrokerHosts brokerHosts = new ZkHosts(zkConnString);
-        SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, topicName, "/" + topicName, UUID.randomUUID().toString());
-        spoutConfig.scheme = new StringMultiSchemeWithTopic();
-        spoutConfig.ignoreZkOffsets = true;
-
-        KafkaSpout spout = new KafkaSpout(spoutConfig);
-
-        // 2 -   DevNull Bolt   --------
-        DevNullBolt bolt = new DevNullBolt();
-
-        // 3 - Setup Topology  --------
-        TopologyBuilder builder = new TopologyBuilder();
-        builder.setSpout(SPOUT_ID, spout, spoutNum);
-        builder.setBolt(BOLT_ID, bolt, boltNum)
-                .localOrShuffleGrouping(SPOUT_ID);
-
-        return builder.createTopology();
-    }
-
-
-    public static int getInt(Map map, Object key, int def) {
-        return Utils.getInt(Utils.get(map, key, def));
-    }
-
-    public static String getStr(Map map, Object key) {
-        return (String) map.get(key);
-    }
-
-
-    /**
-     * Copies text file content from sourceDir to destinationDir. Moves source files into sourceDir after its done consuming
-     */
-    public static void main(String[] args) throws Exception {
-        if (args.length !=2) {
-            System.err.println("args: runDurationSec confFile");
-            return;
-        }
-        Integer durationSec = Integer.parseInt(args[0]);
-        Map topoConf = Utils.findAndReadConfigFile(args[1]);
-
-        //  Submit to Storm cluster
-        Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java b/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java
deleted file mode 100755
index 5b97540..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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 org.apache.storm.perf;
-
-import org.apache.storm.LocalCluster;
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.hdfs.bolt.HdfsBolt;
-import org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat;
-import org.apache.storm.hdfs.bolt.format.FileNameFormat;
-import org.apache.storm.hdfs.bolt.format.RecordFormat;
-import org.apache.storm.hdfs.bolt.rotation.FileRotationPolicy;
-import org.apache.storm.hdfs.bolt.rotation.FileSizeRotationPolicy;
-import org.apache.storm.hdfs.bolt.sync.CountSyncPolicy;
-import org.apache.storm.hdfs.bolt.sync.SyncPolicy;
-import org.apache.storm.perf.spout.StringGenSpout;
-import org.apache.storm.perf.utils.Helper;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.utils.Utils;
-
-import java.util.Map;
-
-/***
- * This topo helps measure speed of writing to Hdfs
- *  Spout generates fixed length random strings.
- *  Bolt writes to Hdfs
- */
-
-public class StrGenSpoutHdfsBoltTopo {
-
-    // configs - topo parallelism
-    public static final String SPOUT_NUM = "spout.count";
-    public static final String BOLT_NUM =  "bolt.count";
-
-    // configs - hdfs bolt
-    public static final String HDFS_URI   = "hdfs.uri";
-    public static final String HDFS_PATH  = "hdfs.dir";
-    public static final String HDFS_BATCH = "hdfs.batch";
-
-    public static final int DEFAULT_SPOUT_NUM = 1;
-    public static final int DEFAULT_BOLT_NUM = 1;
-    public static final int DEFAULT_HDFS_BATCH = 1000;
-
-    // names
-    public static final String TOPOLOGY_NAME = "StrGenSpoutHdfsBoltTopo";
-    public static final String SPOUT_ID = "GenSpout";
-    public static final String BOLT_ID = "hdfsBolt";
-
-
-    public static StormTopology getTopology(Map topoConf) {
-        final int hdfsBatch = Helper.getInt(topoConf, HDFS_BATCH, DEFAULT_HDFS_BATCH);
-
-        // 1 -  Setup StringGen Spout   --------
-        StringGenSpout spout = new StringGenSpout(100).withFieldName("str");
-
-
-        // 2 -  Setup HFS Bolt   --------
-        String Hdfs_url = Helper.getStr(topoConf, HDFS_URI);
-        RecordFormat format = new LineWriter("str");
-        SyncPolicy syncPolicy = new CountSyncPolicy(hdfsBatch);
-        FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy(1.0f, FileSizeRotationPolicy.Units.GB);
-        final int spoutNum = Helper.getInt(topoConf, SPOUT_NUM, DEFAULT_SPOUT_NUM);
-        final int boltNum = Helper.getInt(topoConf, BOLT_NUM, DEFAULT_BOLT_NUM);
-
-        // Use default, Storm-generated file names
-        FileNameFormat fileNameFormat = new DefaultFileNameFormat().withPath(Helper.getStr(topoConf, HDFS_PATH) );
-
-        // Instantiate the HdfsBolt
-        HdfsBolt bolt = new HdfsBolt()
-                .withFsUrl(Hdfs_url)
-                .withFileNameFormat(fileNameFormat)
-                .withRecordFormat(format)
-                .withRotationPolicy(rotationPolicy)
-                .withSyncPolicy(syncPolicy);
-
-
-        // 3 - Setup Topology  --------
-
-        TopologyBuilder builder = new TopologyBuilder();
-        builder.setSpout(SPOUT_ID, spout, spoutNum);
-        builder.setBolt(BOLT_ID, bolt, boltNum)
-                .localOrShuffleGrouping(SPOUT_ID);
-
-        return builder.createTopology();
-    }
-
-
-    /** Spout generates random strings and HDFS bolt writes them to a text file */
-    public static void main(String[] args) throws Exception {
-        if(args.length <= 0) {
-            // submit to local cluster
-            Map topoConf = Utils.findAndReadConfigFile("conf/HdfsSpoutTopo.yaml");
-            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(topoConf));
-
-            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
-            while (true) {//  run indefinitely till Ctrl-C
-                Thread.sleep(20_000_000);
-            }
-        } else {
-            //  Submit to Storm cluster
-            if (args.length !=2) {
-                System.err.println("args: runDurationSec confFile");
-                return;
-            }
-            Integer durationSec = Integer.parseInt(args[0]);
-            Map topoConf = Utils.findAndReadConfigFile(args[1]);
-
-            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
-        }
-    }
-
-
-    public static class LineWriter implements RecordFormat {
-        private String lineDelimiter = System.lineSeparator();
-        private String fieldName;
-
-        public LineWriter(String fieldName) {
-            this.fieldName = fieldName;
-        }
-
-        /**
-         * Overrides the default record delimiter.
-         *
-         * @param delimiter
-         * @return
-         */
-        public LineWriter withLineDelimiter(String delimiter){
-            this.lineDelimiter = delimiter;
-            return this;
-        }
-
-        public byte[] format(Tuple tuple) {
-            return (tuple.getValueByField(fieldName).toString() +  this.lineDelimiter).getBytes();
-        }
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java b/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java
deleted file mode 100644
index b79a0ee..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 org.apache.storm.perf.bolt;
-
-
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseBasicBolt;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.tuple.Values;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class CountBolt extends BaseBasicBolt {
-    public static final String FIELDS_WORD = "word";
-    public static final String FIELDS_COUNT = "count";
-
-    Map<String, Integer> counts = new HashMap<>();
-
-    @Override
-    public void prepare(Map stormConf, TopologyContext context) {
-    }
-
-    @Override
-    public void execute(Tuple tuple, BasicOutputCollector collector) {
-        String word = tuple.getString(0);
-        Integer count = counts.get(word);
-        if (count == null)
-            count = 0;
-        count++;
-        counts.put(word, count);
-        collector.emit(new Values(word, count));
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields(FIELDS_WORD, FIELDS_COUNT));
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java b/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java
deleted file mode 100755
index b85ce15..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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 org.apache.storm.perf.bolt;
-
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichBolt;
-import org.apache.storm.tuple.Tuple;
-
-import java.util.Map;
-
-
-public class DevNullBolt extends BaseRichBolt {
-    private OutputCollector collector;
-
-    @Override
-    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public void execute(Tuple tuple) {
-        collector.ack(tuple);
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java b/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java
deleted file mode 100644
index 116265e..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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 org.apache.storm.perf.bolt;
-
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichBolt;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.tuple.Values;
-
-import java.util.Map;
-
-public class IdBolt extends BaseRichBolt {
-    private OutputCollector collector;
-
-    @Override
-    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public void execute(Tuple tuple) {
-        collector.emit(tuple, new Values( tuple.getValues() ) );
-        collector.ack(tuple);
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields("field1"));
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java b/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java
deleted file mode 100644
index 96f9f73..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 org.apache.storm.perf.bolt;
-
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseBasicBolt;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.tuple.Values;
-
-import java.util.Map;
-
-
-public class SplitSentenceBolt extends BaseBasicBolt {
-    public static final String FIELDS = "word";
-
-    @Override
-    public void prepare(Map stormConf, TopologyContext context) {
-    }
-
-    @Override
-    public void execute(Tuple input, BasicOutputCollector collector) {
-        for (String word : splitSentence(input.getString(0))) {
-            collector.emit(new Values(word));
-        }
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields(FIELDS));
-    }
-
-
-    public static String[] splitSentence(String sentence) {
-        if (sentence != null) {
-            return sentence.split("\\s+");
-        }
-        return null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java b/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java
deleted file mode 100755
index b66e4f3..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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 org.apache.storm.perf.spout;
-
-
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichSpout;
-import org.apache.storm.tuple.Fields;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-public class ConstSpout extends BaseRichSpout {
-
-    private static final String DEFAUT_FIELD_NAME = "str";
-    private String value;
-    private String fieldName = DEFAUT_FIELD_NAME;
-    private SpoutOutputCollector collector = null;
-    private int count=0;
-
-    public ConstSpout(String value) {
-        this.value = value;
-    }
-
-    public ConstSpout withOutputFields(String fieldName) {
-        this.fieldName = fieldName;
-        return this;
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields(fieldName));
-    }
-
-    @Override
-    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public void nextTuple() {
-        List<Object> tuple = Collections.singletonList((Object) value);
-        collector.emit(tuple, count++);
-    }
-
-    @Override
-    public void ack(Object msgId) {
-        super.ack(msgId);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java b/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java
deleted file mode 100644
index 959e7c6..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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 org.apache.storm.perf.spout;
-
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichSpout;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class FileReadSpout extends BaseRichSpout {
-    public static final String FIELDS = "sentence";
-    private static final long serialVersionUID = -2582705611472467172L;
-    private transient FileReader reader;
-    private String file;
-    private boolean ackEnabled = true;
-    private SpoutOutputCollector collector;
-
-    private long count = 0;
-
-
-    public FileReadSpout(String file) {
-        this.file = file;
-    }
-
-    // For testing
-    FileReadSpout(FileReader reader) {
-        this.reader = reader;
-    }
-
-    @Override
-    public void open(Map conf, TopologyContext context,
-                     SpoutOutputCollector collector) {
-        this.collector = collector;
-        Object ackObj = conf.get("topology.acker.executors");
-        if (ackObj != null && ackObj.equals(0)) {
-            this.ackEnabled = false;
-        }
-        // for tests, reader will not be null
-        if (this.reader == null) {
-            this.reader = new FileReader(this.file);
-        }
-    }
-
-    @Override
-    public void nextTuple() {
-        if (ackEnabled) {
-            collector.emit(new Values(reader.nextLine()), count);
-            count++;
-        } else {
-            collector.emit(new Values(reader.nextLine()));
-        }
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields(FIELDS));
-    }
-
-    public static List<String> readLines(InputStream input) {
-        List<String> lines = new ArrayList<>();
-        try {
-            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
-            try {
-                String line;
-                while ((line = reader.readLine()) != null) {
-                    lines.add(line);
-                }
-            } catch (IOException e) {
-                throw new RuntimeException("Reading file failed", e);
-            } finally {
-                reader.close();
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("Error closing reader", e);
-        }
-        return lines;
-    }
-
-    public static class FileReader implements Serializable {
-
-        private static final long serialVersionUID = -7012334600647556267L;
-
-        public final String file;
-        private List<String> contents = null;
-        private int index = 0;
-        private int limit = 0;
-
-        public FileReader(String file) {
-            this.file = file;
-            if (this.file != null) {
-                try {
-                    this.contents = readLines(new FileInputStream(this.file));
-                } catch (IOException e) {
-                    e.printStackTrace();
-                    throw new IllegalArgumentException("Cannot open file " + file, e);
-                }
-                this.limit = contents.size();
-            } else {
-                throw new IllegalArgumentException("file name cannot be null");
-            }
-        }
-
-        public String nextLine() {
-            if (index >= limit) {
-                index = 0;
-            }
-            String line = contents.get(index);
-            index++;
-            return line;
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java b/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java
deleted file mode 100755
index f9c665b..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/spout/StringGenSpout.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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 org.apache.storm.perf.spout;
-
-
-import org.apache.commons.lang.RandomStringUtils;
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichSpout;
-import org.apache.storm.tuple.Fields;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/** Spout pre-computes a list with 30k fixed length random strings.
- *  Emits sequentially from this list, over and over again.
- */
-
-public class StringGenSpout extends BaseRichSpout {
-
-    private static final String DEFAULT_FIELD_NAME = "str";
-    private int strLen;
-    private final int strCount = 30_000;
-    private String fieldName = DEFAULT_FIELD_NAME;
-    private SpoutOutputCollector collector = null;
-    ArrayList<String> records;
-    private int curr=0;
-    private int count=0;
-
-    public StringGenSpout(int strLen) {
-        this.strLen = strLen;
-    }
-
-    public StringGenSpout withFieldName(String fieldName) {
-        this.fieldName = fieldName;
-        return this;
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare( new Fields(fieldName) );
-    }
-
-    @Override
-    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-        this.records = genStringList(strLen, strCount);
-
-        this.collector = collector;
-    }
-
-    private static ArrayList<String> genStringList(int strLen, int count) {
-        ArrayList<String> result = new ArrayList<String>(count);
-        for (int i = 0; i < count; i++) {
-            result.add( RandomStringUtils.random(strLen) );
-        }
-        return result;
-    }
-
-    @Override
-    public void nextTuple() {
-        List<Object> tuple;
-        if( curr < strCount ) {
-            tuple = Collections.singletonList((Object) records.get(curr));
-            ++curr;
-            collector.emit(tuple, ++count);
-        }
-    }
-
-
-    @Override
-    public void ack(Object msgId) {
-        super.ack(msgId);
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java b/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java
deleted file mode 100755
index 686f9da..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/utils/BasicMetricsCollector.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * 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 org.apache.storm.perf.utils;
-
-import org.apache.storm.LocalCluster;
-import org.apache.storm.generated.Nimbus;
-import org.apache.storm.utils.NimbusClient;
-import org.apache.storm.utils.Utils;
-import org.apache.log4j.Logger;
-
-import java.io.PrintWriter;
-import java.util.*;
-
-
-public class BasicMetricsCollector  {
-
-    private LocalCluster localCluster = null;
-    private Nimbus.Client client = null;
-    private PrintWriter dataWriter;
-    private long startTime=0;
-
-    public enum MetricsItem {
-        TOPOLOGY_STATS,
-        XSFER_RATE,
-        SPOUT_THROUGHPUT,
-        SPOUT_LATENCY,
-        ALL
-    }
-
-
-    /* headers */
-    public static final String TIME = "elapsed (sec)";
-    public static final String TIME_FORMAT = "%d";
-    public static final String TOTAL_SLOTS = "total_slots";
-    public static final String USED_SLOTS = "used_slots";
-    public static final String WORKERS = "workers";
-    public static final String TASKS = "tasks";
-    public static final String EXECUTORS = "executors";
-    public static final String TRANSFERRED = "transferred (messages)";
-    public static final String XSFER_RATE = "transfer rate (messages/s)";
-    public static final String SPOUT_EXECUTORS = "spout_executors";
-    public static final String SPOUT_TRANSFERRED = "spout_transferred (messages)";
-    public static final String SPOUT_ACKED = "spout_acks";
-    public static final String SPOUT_THROUGHPUT = "spout_throughput (acks/s)";
-    public static final String SPOUT_AVG_COMPLETE_LATENCY = "spout_avg_complete_latency(ms)";
-    public static final String SPOUT_AVG_LATENCY_FORMAT = "%.1f";
-    public static final String SPOUT_MAX_COMPLETE_LATENCY = "spout_max_complete_latency(ms)";
-    public static final String SPOUT_MAX_LATENCY_FORMAT = "%.1f";
-    private static final Logger LOG = Logger.getLogger(BasicMetricsCollector.class);
-    final MetricsCollectorConfig config;
-    //    final StormTopology topology;
-    final Set<String> header = new LinkedHashSet<String>();
-    final Map<String, String> metrics = new HashMap<String, String>();
-    int lineNumber = 0;
-
-    final boolean collectTopologyStats;
-    final boolean collectExecutorStats;
-    final boolean collectThroughput;
-
-    final boolean collectSpoutThroughput;
-    final boolean collectSpoutLatency;
-
-    private MetricsSample lastSample;
-    private MetricsSample curSample;
-    private double maxLatency = 0;
-
-    boolean first = true;
-
-    public BasicMetricsCollector(Nimbus.Client client, String topoName, Map stormConfig) {
-        this(topoName, stormConfig);
-        this.client = client;
-        this.localCluster = null;
-    }
-
-    public BasicMetricsCollector(LocalCluster localCluster, String topoName, Map stormConfig) {
-        this(topoName, stormConfig);
-        this.client = null;
-        this.localCluster = localCluster;
-    }
-
-    private BasicMetricsCollector(String topoName, Map stormConfig) {
-        Set<MetricsItem> items = getMetricsToCollect();
-        this.config = new MetricsCollectorConfig(topoName, stormConfig);
-        collectTopologyStats = collectTopologyStats(items);
-        collectExecutorStats = collectExecutorStats(items);
-        collectThroughput = collectThroughput(items);
-        collectSpoutThroughput = collectSpoutThroughput(items);
-        collectSpoutLatency = collectSpoutLatency(items);
-        dataWriter = new PrintWriter(System.err);
-    }
-
-
-    private Set<MetricsItem>  getMetricsToCollect() {
-        Set<MetricsItem> result = new HashSet<>();
-        result.add(MetricsItem.ALL);
-        return result;
-    }
-
-    public void collect(Nimbus.Client client) {
-        try {
-            if (!first) {
-                this.lastSample = this.curSample;
-                this.curSample = MetricsSample.factory(client, config.name);
-                updateStats(dataWriter);
-                writeLine(dataWriter);
-            } else {
-                LOG.info("Getting baseline metrics sample.");
-                writeHeader(dataWriter);
-                this.curSample = MetricsSample.factory(client, config.name);
-                first = false;
-                startTime = System.currentTimeMillis();
-            }
-        } catch (Exception e) {
-            LOG.error("storm metrics failed! ", e);
-        }
-    }
-
-    public void collect(LocalCluster localCluster) {
-        try {
-            if (!first) {
-                this.lastSample = this.curSample;
-                this.curSample = MetricsSample.factory(localCluster, config.name);
-                updateStats(dataWriter);
-                writeLine(dataWriter);
-            } else {
-                LOG.info("Getting baseline metrics sample.");
-                writeHeader(dataWriter);
-                this.curSample = MetricsSample.factory(localCluster, config.name);
-                first = false;
-                startTime = System.currentTimeMillis();
-            }
-        } catch (Exception e) {
-            LOG.error("storm metrics failed! ", e);
-        }
-    }
-
-    public void close() {
-        dataWriter.close();
-    }
-
-    boolean updateStats(PrintWriter writer)
-            throws Exception {
-        if (collectTopologyStats) {
-            updateTopologyStats();
-        }
-        if (collectExecutorStats) {
-            updateExecutorStats();
-        }
-        return true;
-    }
-
-    void updateTopologyStats() {
-        long timeTotal = System.currentTimeMillis() - startTime;
-        int numWorkers = this.curSample.getNumWorkers();
-        int numExecutors = this.curSample.getNumExecutors();
-        int numTasks = this.curSample.getNumTasks();
-        metrics.put(TIME, String.format(TIME_FORMAT, timeTotal / 1000));
-        metrics.put(WORKERS, Integer.toString(numWorkers));
-        metrics.put(EXECUTORS, Integer.toString(numExecutors));
-        metrics.put(TASKS, Integer.toString(numTasks));
-    }
-
-    void updateExecutorStats() {
-        long timeDiff = this.curSample.getSampleTime() - this.lastSample.getSampleTime();
-        long transferredDiff = this.curSample.getTotalTransferred() - this.lastSample.getTotalTransferred();
-        long throughput = transferredDiff / (timeDiff / 1000);
-
-        long spoutDiff = this.curSample.getSpoutTransferred() - this.lastSample.getSpoutTransferred();
-        long spoutAckedDiff = this.curSample.getTotalAcked() - this.lastSample.getTotalAcked();
-        long spoutThroughput = spoutDiff / (timeDiff / 1000);
-
-        if (collectThroughput) {
-            metrics.put(TRANSFERRED, Long.toString(transferredDiff));
-            metrics.put(XSFER_RATE, Long.toString(throughput));
-        }
-
-        if (collectSpoutThroughput) {
-
-            metrics.put(SPOUT_EXECUTORS, Integer.toString(this.curSample.getSpoutExecutors()));
-            metrics.put(SPOUT_TRANSFERRED, Long.toString(spoutDiff));
-            metrics.put(SPOUT_ACKED, Long.toString(spoutAckedDiff));
-            metrics.put(SPOUT_THROUGHPUT, Long.toString(spoutThroughput));
-        }
-
-
-        if (collectSpoutLatency) {
-            double latency = this.curSample.getTotalLatency();
-            if (latency > this.maxLatency) {
-                this.maxLatency = latency;
-            }
-            metrics.put(SPOUT_AVG_COMPLETE_LATENCY,
-                    String.format(SPOUT_AVG_LATENCY_FORMAT, latency));
-            metrics.put(SPOUT_MAX_COMPLETE_LATENCY,
-                    String.format(SPOUT_MAX_LATENCY_FORMAT, this.maxLatency));
-
-        }
-    }
-
-
-    void writeHeader(PrintWriter writer) {
-        header.add(TIME);
-        if (collectTopologyStats) {
-            header.add(WORKERS);
-            header.add(TASKS);
-            header.add(EXECUTORS);
-        }
-
-        if (collectThroughput) {
-            header.add(TRANSFERRED);
-            header.add(XSFER_RATE);
-        }
-
-        if (collectSpoutThroughput) {
-            header.add(SPOUT_EXECUTORS);
-            header.add(SPOUT_TRANSFERRED);
-            header.add(SPOUT_ACKED);
-            header.add(SPOUT_THROUGHPUT);
-        }
-
-        if (collectSpoutLatency) {
-            header.add(SPOUT_AVG_COMPLETE_LATENCY);
-            header.add(SPOUT_MAX_COMPLETE_LATENCY);
-        }
-
-        writer.println("\n------------------------------------------------------------------------------------------------------------------");
-        String str = Utils.join(header, ",");
-        writer.println(str);
-        writer.println("------------------------------------------------------------------------------------------------------------------");
-        writer.flush();
-    }
-
-    void writeLine(PrintWriter writer) {
-        List<String> line = new LinkedList<String>();
-        for (String h : header) {
-            line.add(metrics.get(h));
-        }
-        String str = Utils.join(line, ",");
-        writer.println(str);
-        writer.flush();
-    }
-
-
-    boolean collectTopologyStats(Set<MetricsItem> items) {
-        return items.contains(MetricsItem.ALL) ||
-                items.contains(MetricsItem.TOPOLOGY_STATS);
-    }
-
-    boolean collectExecutorStats(Set<MetricsItem> items) {
-        return items.contains(MetricsItem.ALL) ||
-                items.contains(MetricsItem.XSFER_RATE) ||
-                items.contains(MetricsItem.SPOUT_LATENCY);
-    }
-
-    boolean collectThroughput(Set<MetricsItem> items) {
-        return items.contains(MetricsItem.ALL) ||
-                items.contains(MetricsItem.XSFER_RATE);
-    }
-
-    boolean collectSpoutThroughput(Set<MetricsItem> items) {
-        return items.contains(MetricsItem.ALL) ||
-                items.contains(MetricsItem.SPOUT_THROUGHPUT);
-    }
-
-    boolean collectSpoutLatency(Set<MetricsItem> items) {
-        return items.contains(MetricsItem.ALL) ||
-                items.contains(MetricsItem.SPOUT_LATENCY);
-    }
-
-
-
-    public static class MetricsCollectorConfig {
-        private static final Logger LOG = Logger.getLogger(MetricsCollectorConfig.class);
-
-        // storm configuration
-        public final Map stormConfig;
-        // storm topology name
-        public final String name;
-        // benchmark label
-        public final String label;
-
-        public MetricsCollectorConfig(String topoName, Map stormConfig) {
-            this.stormConfig = stormConfig;
-            String labelStr = (String) stormConfig.get("benchmark.label");
-            this.name = topoName;
-            if (labelStr == null) {
-                LOG.warn("'benchmark.label' not found in config. Defaulting to topology name");
-                labelStr = this.name;
-            }
-            this.label = labelStr;
-        }
-    } // MetricsCollectorConfig
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java b/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java
deleted file mode 100755
index 8bcd84f..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/utils/Helper.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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 org.apache.storm.perf.utils;
-
-import org.apache.storm.Config;
-import org.apache.storm.LocalCluster;
-import org.apache.storm.StormSubmitter;
-import org.apache.storm.generated.KillOptions;
-import org.apache.storm.generated.Nimbus;
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.utils.NimbusClient;
-import org.apache.storm.utils.Utils;
-
-import java.util.Map;
-
-
-public class Helper {
-
-  public static void kill(Nimbus.Client client, String topoName) throws Exception {
-    KillOptions opts = new KillOptions();
-    opts.set_wait_secs(0);
-    client.killTopologyWithOpts(topoName, opts);
-  }
-
-  public static void killAndShutdownCluster(LocalCluster cluster, String topoName) throws Exception {
-    KillOptions opts = new KillOptions();
-    opts.set_wait_secs(0);
-    cluster.killTopologyWithOpts(topoName, opts);
-    cluster.shutdown();
-  }
-
-
-    public static LocalCluster runOnLocalCluster(String topoName, StormTopology topology) throws Exception {
-        LocalCluster cluster = new LocalCluster();
-        cluster.submitTopology(topoName, new Config(), topology);
-        return cluster;
-    }
-
-    public static int getInt(Map map, Object key, int def) {
-        return Utils.getInt(Utils.get(map, key, def));
-    }
-
-    public static String getStr(Map map, Object key) {
-        return (String) map.get(key);
-    }
-
-    public static void collectMetricsAndKill(String topologyName, Integer pollInterval, Integer duration) throws Exception {
-        Map clusterConf = Utils.readStormConfig();
-        Nimbus.Client client = NimbusClient.getConfiguredClient(clusterConf).getClient();
-        BasicMetricsCollector metricsCollector = new BasicMetricsCollector(client, topologyName, clusterConf);
-
-        int times = duration / pollInterval;
-        metricsCollector.collect(client);
-        for (int i = 0; i < times; i++) {
-            Thread.sleep(pollInterval * 1000);
-            metricsCollector.collect(client);
-        }
-        metricsCollector.close();
-        kill(client, topologyName);
-    }
-
-    public static void collectLocalMetricsAndKill(LocalCluster localCluster, String topologyName, Integer pollInterval, Integer duration, Map clusterConf) throws Exception {
-        BasicMetricsCollector metricsCollector = new BasicMetricsCollector(localCluster, topologyName, clusterConf);
-
-        int times = duration / pollInterval;
-        metricsCollector.collect(localCluster);
-        for (int i = 0; i < times; i++) {
-            Thread.sleep(pollInterval * 1000);
-            metricsCollector.collect(localCluster);
-        }
-        metricsCollector.close();
-        killAndShutdownCluster(localCluster, topologyName);
-    }
-
-    /** Kill topo and Shutdown local cluster on Ctrl-C */
-  public static void setupShutdownHook(final LocalCluster cluster, final String topoName) {
-    Runtime.getRuntime().addShutdownHook(new Thread() {
-      public void run() {
-          try {
-              cluster.killTopology(topoName);
-              System.out.println("Killed Topology");
-          } catch (Exception e) {
-              System.err.println("Encountered error in killing topology: " + e);
-          }
-        cluster.shutdown();
-      }
-    });
-  }
-
-  /** Kill topo on Ctrl-C */
-  public static void setupShutdownHook(final String topoName) {
-    Map clusterConf = Utils.readStormConfig();
-    final Nimbus.Client client = NimbusClient.getConfiguredClient(clusterConf).getClient();
-    Runtime.getRuntime().addShutdownHook(new Thread() {
-      public void run() {
-        try {
-          Helper.kill(client, topoName);
-          System.out.println("Killed Topology");
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
-      }
-    });
-  }
-
-    public static void runOnClusterAndPrintMetrics(Integer durationSec, String topoName, Map topoConf, StormTopology topology) throws Exception {
-      // submit topology
-      StormSubmitter.submitTopologyWithProgressBar(topoName, topoConf, topology);
-      setupShutdownHook(topoName); // handle Ctrl-C
-
-      // poll metrics every minute, then kill topology after specified duration
-      Integer pollIntervalSec = 60;
-      collectMetricsAndKill(topoName, pollIntervalSec, durationSec);
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java b/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java
deleted file mode 100755
index 396ad53..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/utils/IdentityBolt.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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 org.apache.storm.perf.utils;
-
-
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichBolt;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.tuple.Values;
-
-import java.util.Map;
-
-
-public class IdentityBolt extends BaseRichBolt {
-    private OutputCollector collector;
-
-    @Override
-    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public void execute(Tuple tuple) {
-        collector.emit(tuple, tuple.getValues() );
-        collector.ack(tuple);
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-
-    }
-}
-


[06/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/src/main/resources/jms-activemq.xml
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/src/main/resources/jms-activemq.xml b/external/storm-jms/examples/src/main/resources/jms-activemq.xml
deleted file mode 100644
index 1a845b8..0000000
--- a/external/storm-jms/examples/src/main/resources/jms-activemq.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<beans 
-  xmlns="http://www.springframework.org/schema/beans" 
-  xmlns:amq="http://activemq.apache.org/schema/core"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
-  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
-
-	<!-- ActiveMQ -->
-
-	<!-- embedded ActiveMQ Broker -->
-	<!-- <amq:broker useJmx="false" persistent="false">
-		<amq:transportConnectors>
-			<amq:transportConnector uri="tcp://localhost:61616" />
-		</amq:transportConnectors>
-	</amq:broker> -->
-
-	<amq:queue id="notificationQueue" physicalName="backtype.storm.contrib.example.queue" />
-	
-	<amq:topic id="notificationTopic" physicalName="backtype.storm.contrib.example.topic" />
-
-	<amq:connectionFactory id="jmsConnectionFactory"
-		brokerURL="tcp://localhost:61616" />
-
-	<!-- <bean id="queueTemplate" class="org.springframework.jms.core.JmsTemplate">
-		<property name="connectionFactory">
-			<ref bean="jmsConnectionFactory" />
-		</property>
-		<property name="pubSubDomain" value="false" />
-	</bean> -->
-	
-</beans>
-
-
-
-
-

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/src/main/resources/log4j.properties b/external/storm-jms/examples/src/main/resources/log4j.properties
deleted file mode 100644
index 079b195..0000000
--- a/external/storm-jms/examples/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-# 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.
-
-log4j.rootLogger=INFO, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-
-log4j.appender.stdout.layout.ConversionPattern=%5p (%C:%L) - %m%n
-
-
-log4j.logger.backtype.storm.contrib=DEBUG
-log4j.logger.clojure.contrib=WARN
-log4j.logger.org.springframework=WARN
-log4j.logger.org.apache.zookeeper=WARN
-

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-jms/pom.xml b/external/storm-jms/pom.xml
index 6a6e60a..0e0feb4 100644
--- a/external/storm-jms/pom.xml
+++ b/external/storm-jms/pom.xml
@@ -27,8 +27,9 @@
 
 
 
-    <artifactId>storm-jms-parent</artifactId>
-    <packaging>pom</packaging>
+    <artifactId>storm-jms</artifactId>
+
+
 
     <developers>
         <developer>
@@ -38,10 +39,45 @@
         </developer>
     </developers>
 
-    <modules>
-        <module>core</module>
-        <module>examples</module>
-    </modules>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-core</artifactId>
+            <version>${project.version}</version>
+            <!-- keep storm out of the jar-with-dependencies -->
+            <scope>${provided.scope}</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-jms_1.1_spec</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.10</version>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- Active MQ -->
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>activemq-core</artifactId>
+            <version>5.5.1</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+    </dependencies>
 
     <build>
         <plugins>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/JmsMessageProducer.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/JmsMessageProducer.java b/external/storm-jms/src/main/java/org/apache/storm/jms/JmsMessageProducer.java
new file mode 100644
index 0000000..4932929
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/JmsMessageProducer.java
@@ -0,0 +1,46 @@
+/**
+ * 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 org.apache.storm.jms;
+
+import java.io.Serializable;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
+
+import org.apache.storm.tuple.ITuple;
+
+/**
+ * JmsMessageProducer implementations are responsible for translating
+ * a <code>org.apache.storm.tuple.Values</code> instance into a
+ * <code>javax.jms.Message</code> object.
+ * <p>
+ */
+public interface JmsMessageProducer extends Serializable {
+
+    /**
+     * Translate a <code>org.apache.storm.tuple.Tuple</code> object
+     * to a <code>javax.jms.Message</code object.
+     *
+     * @param session
+     * @param input
+     * @return
+     * @throws JMSException
+     */
+    public Message toMessage(Session session, ITuple input) throws JMSException;
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/JmsProvider.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/JmsProvider.java b/external/storm-jms/src/main/java/org/apache/storm/jms/JmsProvider.java
new file mode 100644
index 0000000..d976326
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/JmsProvider.java
@@ -0,0 +1,48 @@
+/**
+ * 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 org.apache.storm.jms;
+
+import java.io.Serializable;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+
+/**
+ * A <code>JmsProvider</code> object encapsulates the <code>ConnectionFactory</code>
+ * and <code>Destination</code> JMS objects the <code>JmsSpout</code> needs to manage
+ * a topic/queue connection over the course of it's lifecycle.
+ *
+ */
+public interface JmsProvider extends Serializable {
+    /**
+     * Provides the JMS <code>ConnectionFactory</code>
+     *
+     * @return the connection factory
+     * @throws Exception
+     */
+    public ConnectionFactory connectionFactory() throws Exception;
+
+    /**
+     * Provides the <code>Destination</code> (topic or queue) from which the
+     * <code>JmsSpout</code> will receive messages.
+     *
+     * @return
+     * @throws Exception
+     */
+    public Destination destination() throws Exception;
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/JmsTupleProducer.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/JmsTupleProducer.java b/external/storm-jms/src/main/java/org/apache/storm/jms/JmsTupleProducer.java
new file mode 100644
index 0000000..0bbb3a0
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/JmsTupleProducer.java
@@ -0,0 +1,58 @@
+/**
+ * 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 org.apache.storm.jms;
+
+import java.io.Serializable;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Values;
+
+/**
+ * Interface to define classes that can produce a Storm <code>Values</code> objects
+ * from a <code>javax.jms.Message</code> object>.
+ * <p>
+ * Implementations are also responsible for declaring the output
+ * fields they produce.
+ * <p>
+ * If for some reason the implementation can't process a message
+ * (for example if it received a <code>javax.jms.ObjectMessage</code>
+ * when it was expecting a <code>javax.jms.TextMessage</code> it should
+ * return <code>null</code> to indicate to the <code>JmsSpout</code> that
+ * the message could not be processed.
+ *
+ */
+public interface JmsTupleProducer extends Serializable {
+    /**
+     * Process a JMS message object to create a Values object.
+     *
+     * @param msg - the JMS message
+     * @return the Values tuple, or null if the message couldn't be processed.
+     * @throws JMSException
+     */
+    Values toTuple(Message msg) throws JMSException;
+
+    /**
+     * Declare the output fields produced by this JmsTupleProducer.
+     *
+     * @param declarer The OuputFieldsDeclarer for the spout.
+     */
+    void declareOutputFields(OutputFieldsDeclarer declarer);
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java b/external/storm-jms/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java
new file mode 100644
index 0000000..d691e75
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java
@@ -0,0 +1,219 @@
+/**
+ * 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 org.apache.storm.jms.bolt;
+
+import java.util.Map;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+
+import org.apache.storm.topology.base.BaseRichBolt;
+import org.apache.storm.jms.JmsMessageProducer;
+import org.apache.storm.jms.JmsProvider;
+import org.apache.storm.topology.base.BaseTickTupleAwareRichBolt;
+import org.apache.storm.utils.TupleUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Tuple;
+
+/**
+ * A JmsBolt receives <code>org.apache.storm.tuple.Tuple</code> objects from a Storm
+ * topology and publishes JMS Messages to a destination (topic or queue).
+ * <p>
+ * To use a JmsBolt in a topology, the following must be supplied:
+ * <ol>
+ * <li>A <code>JmsProvider</code> implementation.</li>
+ * <li>A <code>JmsMessageProducer</code> implementation.</li>
+ * </ol>
+ * The <code>JmsProvider</code> provides the JMS <code>javax.jms.ConnectionFactory</code>
+ * and <code>javax.jms.Destination</code> objects requied to publish JMS messages.
+ * <p>
+ * The JmsBolt uses a <code>JmsMessageProducer</code> to translate
+ * <code>org.apache.storm.tuple.Tuple</code> objects into
+ * <code>javax.jms.Message</code> objects for publishing.
+ * <p>
+ * Both JmsProvider and JmsMessageProducer must be set, or the bolt will
+ * fail upon deployment to a cluster.
+ * <p>
+ * The JmsBolt is typically an endpoint in a topology -- in other words
+ * it does not emit any tuples.
+ */
+public class JmsBolt extends BaseTickTupleAwareRichBolt {
+    private static Logger LOG = LoggerFactory.getLogger(JmsBolt.class);
+
+    private boolean autoAck = true;
+
+    // javax.jms objects
+    private Connection connection;
+    private Session session;
+    private MessageProducer messageProducer;
+
+    // JMS options
+    private boolean jmsTransactional = false;
+    private int jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
+
+
+    private JmsProvider jmsProvider;
+    private JmsMessageProducer producer;
+
+
+    private OutputCollector collector;
+
+    /**
+     * Set the JmsProvider used to connect to the JMS destination topic/queue
+     *
+     * @param provider
+     */
+    public void setJmsProvider(JmsProvider provider) {
+        this.jmsProvider = provider;
+    }
+
+    /**
+     * Set the JmsMessageProducer used to convert tuples
+     * into JMS messages.
+     *
+     * @param producer
+     */
+    public void setJmsMessageProducer(JmsMessageProducer producer) {
+        this.producer = producer;
+    }
+
+    /**
+     * Sets the JMS acknowledgement mode for JMS messages sent
+     * by this bolt.
+     * <p>
+     * Possible values:
+     * <ul>
+     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
+     * </ul>
+     *
+     * @param acknowledgeMode (constant defined in javax.jms.Session)
+     */
+    public void setJmsAcknowledgeMode(int acknowledgeMode) {
+        this.jmsAcknowledgeMode = acknowledgeMode;
+    }
+
+    /**
+     * Set the JMS transactional setting for the JMS session.
+     *
+     * @param transactional
+     */
+//	public void setJmsTransactional(boolean transactional){
+//		this.jmsTransactional = transactional;
+//	}
+
+    /**
+     * Sets whether or not tuples should be acknowledged by this
+     * bolt.
+     * <p>
+     *
+     * @param autoAck
+     */
+    public void setAutoAck(boolean autoAck) {
+        this.autoAck = autoAck;
+    }
+
+
+    /**
+     * Consumes a tuple and sends a JMS message.
+     * <p>
+     * If autoAck is true, the tuple will be acknowledged
+     * after the message is sent.
+     * <p>
+     * If JMS sending fails, the tuple will be failed.
+     */
+    @Override
+    protected void process(Tuple input) {
+        // write the tuple to a JMS destination...
+        LOG.debug("Tuple received. Sending JMS message.");
+
+        try {
+            Message msg = this.producer.toMessage(this.session, input);
+            if (msg != null) {
+                if (msg.getJMSDestination() != null) {
+                    this.messageProducer.send(msg.getJMSDestination(), msg);
+                } else {
+                    this.messageProducer.send(msg);
+                }
+            }
+            if (this.autoAck) {
+                LOG.debug("ACKing tuple: " + input);
+                this.collector.ack(input);
+            }
+        } catch (JMSException e) {
+            // failed to send the JMS message, fail the tuple fast
+            LOG.warn("Failing tuple: " + input);
+            LOG.warn("Exception: ", e);
+            this.collector.fail(input);
+        }
+    }
+
+    /**
+     * Releases JMS resources.
+     */
+    @Override
+    public void cleanup() {
+        try {
+            LOG.debug("Closing JMS connection.");
+            this.session.close();
+            this.connection.close();
+        } catch (JMSException e) {
+            LOG.warn("Error closing JMS connection.", e);
+        }
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+    }
+
+    /**
+     * Initializes JMS resources.
+     */
+    @Override
+    public void prepare(Map stormConf, TopologyContext context,
+                        OutputCollector collector) {
+        if (this.jmsProvider == null || this.producer == null) {
+            throw new IllegalStateException("JMS Provider and MessageProducer not set.");
+        }
+        this.collector = collector;
+        LOG.debug("Connecting JMS..");
+        try {
+            ConnectionFactory cf = this.jmsProvider.connectionFactory();
+            Destination dest = this.jmsProvider.destination();
+            this.connection = cf.createConnection();
+            this.session = connection.createSession(this.jmsTransactional,
+                    this.jmsAcknowledgeMode);
+            this.messageProducer = session.createProducer(dest);
+
+            connection.start();
+        } catch (Exception e) {
+            LOG.warn("Error creating JMS connection.", e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java b/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java
new file mode 100644
index 0000000..b78a41e
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java
@@ -0,0 +1,58 @@
+/**
+ * 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 org.apache.storm.jms.spout;
+
+import java.io.Serializable;
+
+public class JmsMessageID implements Comparable<JmsMessageID>, Serializable {
+
+    private String jmsID;
+
+    private Long sequence;
+
+    public JmsMessageID(long sequence, String jmsID){
+        this.jmsID = jmsID;
+        this.sequence = sequence;
+    }
+
+
+    public String getJmsID(){
+        return this.jmsID;
+    }
+
+    @Override
+    public int compareTo(JmsMessageID jmsMessageID) {
+        return (int)(this.sequence - jmsMessageID.sequence);
+    }
+
+    @Override
+    public int hashCode() {
+        return this.sequence.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if(o instanceof JmsMessageID){
+            JmsMessageID id = (JmsMessageID)o;
+            return this.jmsID.equals(id.jmsID);
+        } else {
+            return false;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsSpout.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsSpout.java b/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsSpout.java
new file mode 100644
index 0000000..6aaa7c9
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/spout/JmsSpout.java
@@ -0,0 +1,382 @@
+/**
+ * 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 org.apache.storm.jms.spout;
+
+import java.io.Serializable;
+import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.Session;
+
+import org.apache.storm.topology.base.BaseRichSpout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.storm.jms.JmsProvider;
+import org.apache.storm.jms.JmsTupleProducer;
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.utils.Utils;
+
+/**
+ * A Storm <code>Spout</code> implementation that listens to a JMS topic or queue
+ * and outputs tuples based on the messages it receives.
+ * <p>
+ * <code>JmsSpout</code> instances rely on <code>JmsProducer</code> implementations
+ * to obtain the JMS <code>ConnectionFactory</code> and <code>Destination</code> objects
+ * necessary to connect to a JMS topic/queue.
+ * <p>
+ * When a <code>JmsSpout</code> receives a JMS message, it delegates to an
+ * internal <code>JmsTupleProducer</code> instance to create a Storm tuple from the
+ * incoming message.
+ * <p>
+ * Typically, developers will supply a custom <code>JmsTupleProducer</code> implementation
+ * appropriate for the expected message content.
+ */
+@SuppressWarnings("serial")
+public class JmsSpout extends BaseRichSpout implements MessageListener {
+    private static final Logger LOG = LoggerFactory.getLogger(JmsSpout.class);
+
+    // JMS options
+    private int jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
+
+    private boolean distributed = true;
+
+    private JmsTupleProducer tupleProducer;
+
+    private JmsProvider jmsProvider;
+
+    private LinkedBlockingQueue<Message> queue;
+    private TreeSet<JmsMessageID> toCommit;
+    private HashMap<JmsMessageID, Message> pendingMessages;
+    private long messageSequence = 0;
+
+    private SpoutOutputCollector collector;
+
+    private transient Connection connection;
+    private transient Session session;
+
+    private boolean hasFailures = false;
+    public final Serializable recoveryMutex = "RECOVERY_MUTEX";
+    private Timer recoveryTimer = null;
+    private long recoveryPeriod = -1; // default to disabled
+
+    /**
+     * Sets the JMS Session acknowledgement mode for the JMS seesion associated with this spout.
+     * <p>
+     * Possible values:
+     * <ul>
+     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
+     * </ul>
+     *
+     * @param mode JMS Session Acknowledgement mode
+     * @throws IllegalArgumentException if the mode is not recognized.
+     */
+    public void setJmsAcknowledgeMode(int mode) {
+        switch (mode) {
+            case Session.AUTO_ACKNOWLEDGE:
+            case Session.CLIENT_ACKNOWLEDGE:
+            case Session.DUPS_OK_ACKNOWLEDGE:
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown Acknowledge mode: " + mode + " (See javax.jms.Session for valid values)");
+
+        }
+        this.jmsAcknowledgeMode = mode;
+    }
+
+    /**
+     * Returns the JMS Session acknowledgement mode for the JMS seesion associated with this spout.
+     *
+     * @return
+     */
+    public int getJmsAcknowledgeMode() {
+        return this.jmsAcknowledgeMode;
+    }
+
+    /**
+     * Set the <code>JmsProvider</code>
+     * implementation that this Spout will use to connect to
+     * a JMS <code>javax.jms.Desination</code>
+     *
+     * @param provider
+     */
+    public void setJmsProvider(JmsProvider provider) {
+        this.jmsProvider = provider;
+    }
+
+    /**
+     * Set the <code>JmsTupleProducer</code>
+     * implementation that will convert <code>javax.jms.Message</code>
+     * object to <code>org.apache.storm.tuple.Values</code> objects
+     * to be emitted.
+     *
+     * @param producer
+     */
+    public void setJmsTupleProducer(JmsTupleProducer producer) {
+        this.tupleProducer = producer;
+    }
+
+    /**
+     * <code>javax.jms.MessageListener</code> implementation.
+     * <p>
+     * Stored the JMS message in an internal queue for processing
+     * by the <code>nextTuple()</code> method.
+     */
+    public void onMessage(Message msg) {
+        try {
+            LOG.debug("Queuing msg [" + msg.getJMSMessageID() + "]");
+        } catch (JMSException e) {
+        }
+        this.queue.offer(msg);
+    }
+
+    /**
+     * <code>ISpout</code> implementation.
+     * <p>
+     * Connects the JMS spout to the configured JMS destination
+     * topic/queue.
+     */
+    @SuppressWarnings("rawtypes")
+    public void open(Map conf, TopologyContext context,
+                     SpoutOutputCollector collector) {
+        if (this.jmsProvider == null) {
+            throw new IllegalStateException("JMS provider has not been set.");
+        }
+        if (this.tupleProducer == null) {
+            throw new IllegalStateException("JMS Tuple Producer has not been set.");
+        }
+        Integer topologyTimeout = (Integer) conf.get("topology.message.timeout.secs");
+        // TODO fine a way to get the default timeout from storm, so we're not hard-coding to 30 seconds (it could change)
+        topologyTimeout = topologyTimeout == null ? 30 : topologyTimeout;
+        if ((topologyTimeout.intValue() * 1000) > this.recoveryPeriod) {
+            LOG.warn("*** WARNING *** : " +
+                    "Recovery period (" + this.recoveryPeriod + " ms.) is less then the configured " +
+                    "'topology.message.timeout.secs' of " + topologyTimeout +
+                    " secs. This could lead to a message replay flood!");
+        }
+        this.queue = new LinkedBlockingQueue<Message>();
+        this.toCommit = new TreeSet<JmsMessageID>();
+        this.pendingMessages = new HashMap<JmsMessageID, Message>();
+        this.collector = collector;
+        try {
+            ConnectionFactory cf = this.jmsProvider.connectionFactory();
+            Destination dest = this.jmsProvider.destination();
+            this.connection = cf.createConnection();
+            this.session = connection.createSession(false,
+                    this.jmsAcknowledgeMode);
+            MessageConsumer consumer = session.createConsumer(dest);
+            consumer.setMessageListener(this);
+            this.connection.start();
+            if (this.isDurableSubscription() && this.recoveryPeriod > 0) {
+                this.recoveryTimer = new Timer();
+                this.recoveryTimer.scheduleAtFixedRate(new RecoveryTask(), 10, this.recoveryPeriod);
+            }
+
+        } catch (Exception e) {
+            LOG.warn("Error creating JMS connection.", e);
+        }
+
+    }
+
+    public void close() {
+        try {
+            LOG.debug("Closing JMS connection.");
+            this.session.close();
+            this.connection.close();
+        } catch (JMSException e) {
+            LOG.warn("Error closing JMS connection.", e);
+        }
+
+    }
+
+    public void nextTuple() {
+        Message msg = this.queue.poll();
+        if (msg == null) {
+            Utils.sleep(50);
+        } else {
+
+            LOG.debug("sending tuple: " + msg);
+            // get the tuple from the handler
+            try {
+                Values vals = this.tupleProducer.toTuple(msg);
+                // ack if we're not in AUTO_ACKNOWLEDGE mode, or the message requests ACKNOWLEDGE
+                LOG.debug("Requested deliveryMode: " + toDeliveryModeString(msg.getJMSDeliveryMode()));
+                LOG.debug("Our deliveryMode: " + toDeliveryModeString(this.jmsAcknowledgeMode));
+                if (this.isDurableSubscription()) {
+                    LOG.debug("Requesting acks.");
+                    JmsMessageID messageId = new JmsMessageID(this.messageSequence++, msg.getJMSMessageID());
+                    this.collector.emit(vals, messageId);
+
+                    // at this point we successfully emitted. Store
+                    // the message and message ID so we can do a
+                    // JMS acknowledge later
+                    this.pendingMessages.put(messageId, msg);
+                    this.toCommit.add(messageId);
+                } else {
+                    this.collector.emit(vals);
+                }
+            } catch (JMSException e) {
+                LOG.warn("Unable to convert JMS message: " + msg);
+            }
+
+        }
+
+    }
+
+    /*
+     * Will only be called if we're transactional or not AUTO_ACKNOWLEDGE
+     */
+    public void ack(Object msgId) {
+
+        Message msg = this.pendingMessages.remove(msgId);
+        JmsMessageID oldest = this.toCommit.first();
+        if (msgId.equals(oldest)) {
+            if (msg != null) {
+                try {
+                    LOG.debug("Committing...");
+                    msg.acknowledge();
+                    LOG.debug("JMS Message acked: " + msgId);
+                    this.toCommit.remove(msgId);
+                } catch (JMSException e) {
+                    LOG.warn("Error acknowldging JMS message: " + msgId, e);
+                }
+            } else {
+                LOG.warn("Couldn't acknowledge unknown JMS message ID: " + msgId);
+            }
+        } else {
+            this.toCommit.remove(msgId);
+        }
+
+    }
+
+    /*
+     * Will only be called if we're transactional or not AUTO_ACKNOWLEDGE
+     */
+    public void fail(Object msgId) {
+        LOG.warn("Message failed: " + msgId);
+        this.pendingMessages.clear();
+        this.toCommit.clear();
+        synchronized (this.recoveryMutex) {
+            this.hasFailures = true;
+        }
+    }
+
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        this.tupleProducer.declareOutputFields(declarer);
+
+    }
+
+    /**
+     * Returns <code>true</code> if the spout has received failures
+     * from which it has not yet recovered.
+     */
+    public boolean hasFailures() {
+        return this.hasFailures;
+    }
+
+    protected void recovered() {
+        this.hasFailures = false;
+    }
+
+    /**
+     * Sets the periodicity of the timer task that
+     * checks for failures and recovers the JMS session.
+     *
+     * @param period
+     */
+    public void setRecoveryPeriod(long period) {
+        this.recoveryPeriod = period;
+    }
+
+    public boolean isDistributed() {
+        return this.distributed;
+    }
+
+    /**
+     * Sets the "distributed" mode of this spout.
+     * <p>
+     * If <code>true</code> multiple instances of this spout <i>may</i> be
+     * created across the cluster (depending on the "parallelism_hint" in the topology configuration).
+     * <p>
+     * Setting this value to <code>false</code> essentially means this spout will run as a singleton
+     * within the cluster ("parallelism_hint" will be ignored).
+     * <p>
+     * In general, this should be set to <code>false</code> if the underlying JMS destination is a
+     * topic, and <code>true</code> if it is a JMS queue.
+     *
+     * @param distributed
+     */
+    public void setDistributed(boolean distributed) {
+        this.distributed = distributed;
+    }
+
+
+    private static final String toDeliveryModeString(int deliveryMode) {
+        switch (deliveryMode) {
+            case Session.AUTO_ACKNOWLEDGE:
+                return "AUTO_ACKNOWLEDGE";
+            case Session.CLIENT_ACKNOWLEDGE:
+                return "CLIENT_ACKNOWLEDGE";
+            case Session.DUPS_OK_ACKNOWLEDGE:
+                return "DUPS_OK_ACKNOWLEDGE";
+            default:
+                return "UNKNOWN";
+
+        }
+    }
+
+    protected Session getSession() {
+        return this.session;
+    }
+
+    private boolean isDurableSubscription() {
+        return (this.jmsAcknowledgeMode != Session.AUTO_ACKNOWLEDGE);
+    }
+
+
+    private class RecoveryTask extends TimerTask {
+        private final Logger LOG = LoggerFactory.getLogger(RecoveryTask.class);
+
+        public void run() {
+            synchronized (JmsSpout.this.recoveryMutex) {
+                if (JmsSpout.this.hasFailures()) {
+                    try {
+                        LOG.info("Recovering from a message failure.");
+                        JmsSpout.this.getSession().recover();
+                        JmsSpout.this.recovered();
+                    } catch (JMSException e) {
+                        LOG.warn("Could not recover jms session.", e);
+                    }
+                }
+            }
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsBatch.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsBatch.java b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsBatch.java
new file mode 100644
index 0000000..c990058
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsBatch.java
@@ -0,0 +1,27 @@
+/**
+ * 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 org.apache.storm.jms.trident;
+
+/**
+ * Batch coordination metadata object for the TridentJmsSpout.
+ * This implementation does not use batch metadata, so the object is empty.
+ *
+ */
+public class JmsBatch {
+    // Empty class
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsState.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsState.java b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsState.java
new file mode 100644
index 0000000..bfb78b5
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsState.java
@@ -0,0 +1,129 @@
+/**
+ * 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 org.apache.storm.jms.trident;
+
+import org.apache.storm.jms.JmsMessageProducer;
+import org.apache.storm.jms.JmsProvider;
+import org.apache.storm.topology.FailedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.storm.trident.operation.TridentCollector;
+import org.apache.storm.trident.state.State;
+import org.apache.storm.trident.tuple.TridentTuple;
+
+import javax.jms.*;
+import java.io.Serializable;
+import java.lang.IllegalStateException;
+import java.util.List;
+
+public class JmsState implements State {
+
+    private static final Logger LOG = LoggerFactory.getLogger(JmsState.class);
+
+    private Options options;
+    private Connection connection;
+    private Session session;
+    private MessageProducer messageProducer;
+
+    protected JmsState(Options options) {
+        this.options = options;
+    }
+
+    public static class Options implements Serializable {
+        private JmsProvider jmsProvider;
+        private JmsMessageProducer msgProducer;
+        private int jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
+        private boolean jmsTransactional = true;
+
+        public Options withJmsProvider(JmsProvider provider) {
+            this.jmsProvider = provider;
+            return this;
+        }
+
+        public Options withMessageProducer(JmsMessageProducer msgProducer) {
+            this.msgProducer = msgProducer;
+            return this;
+        }
+
+        public Options withJmsAcknowledgeMode(int jmsAcknowledgeMode) {
+            this.jmsAcknowledgeMode = jmsAcknowledgeMode;
+            return this;
+        }
+
+        public Options withJmsTransactional(boolean jmsTransactional) {
+            this.jmsTransactional = jmsTransactional;
+            return this;
+        }
+    }
+
+    protected void prepare() {
+        if(this.options.jmsProvider == null || this.options.msgProducer == null){
+            throw new IllegalStateException("JMS Provider and MessageProducer not set.");
+        }
+        LOG.debug("Connecting JMS..");
+        try {
+            ConnectionFactory cf = this.options.jmsProvider.connectionFactory();
+            Destination dest = this.options.jmsProvider.destination();
+            this.connection = cf.createConnection();
+            this.session = connection.createSession(this.options.jmsTransactional,
+                    this.options.jmsAcknowledgeMode);
+            this.messageProducer = session.createProducer(dest);
+
+            connection.start();
+        } catch (Exception e) {
+            LOG.warn("Error creating JMS connection.", e);
+        }
+    }
+
+    @Override
+    public void beginCommit(Long aLong) {
+    }
+
+    @Override
+    public void commit(Long aLong) {
+        LOG.debug("Committing JMS transaction.");
+        if(this.options.jmsTransactional) {
+            try {
+                session.commit();
+            } catch(JMSException e){
+                LOG.error("JMS Session commit failed.", e);
+            }
+        }
+    }
+
+    public void updateState(List<TridentTuple> tuples, TridentCollector collector) throws JMSException {
+        try {
+        for(TridentTuple tuple : tuples) {
+                Message msg = this.options.msgProducer.toMessage(this.session, tuple);
+                if (msg != null) {
+                    if (msg.getJMSDestination() != null) {
+                        this.messageProducer.send(msg.getJMSDestination(), msg);
+                    } else {
+                        this.messageProducer.send(msg);
+                    }
+                }
+            }
+        } catch (JMSException e) {
+            LOG.warn("Failed to send jmd message for a trident batch ", e);
+            if(this.options.jmsTransactional) {
+                session.rollback();
+            }
+            throw new FailedException("Failed to write tuples", e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java
new file mode 100644
index 0000000..9a02ba9
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java
@@ -0,0 +1,40 @@
+/**
+ * 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 org.apache.storm.jms.trident;
+
+import org.apache.storm.task.IMetricsContext;
+import org.apache.storm.trident.state.State;
+import org.apache.storm.trident.state.StateFactory;
+
+import java.util.Map;
+
+public class JmsStateFactory implements StateFactory {
+
+    private JmsState.Options options;
+
+    public JmsStateFactory(JmsState.Options options) {
+        this.options = options;
+    }
+
+    @Override
+    public State makeState(Map map, IMetricsContext iMetricsContext, int partitionIndex, int numPartitions) {
+        JmsState state = new JmsState(options);
+        state.prepare();
+        return state;
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java
new file mode 100644
index 0000000..a2709a4
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java
@@ -0,0 +1,38 @@
+/**
+ * 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 org.apache.storm.jms.trident;
+
+import org.apache.storm.topology.FailedException;
+import org.apache.storm.trident.operation.TridentCollector;
+import org.apache.storm.trident.state.BaseStateUpdater;
+import org.apache.storm.trident.tuple.TridentTuple;
+
+import javax.jms.JMSException;
+import java.util.List;
+
+public class JmsUpdater extends BaseStateUpdater<JmsState>  {
+
+    @Override
+    public void updateState(JmsState jmsState, List<TridentTuple> tuples, TridentCollector collector) {
+        try {
+            jmsState.updateState(tuples, collector);
+        } catch (JMSException e) {
+            throw new FailedException("failed JMS opetation", e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java
new file mode 100644
index 0000000..55e29bc
--- /dev/null
+++ b/external/storm-jms/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java
@@ -0,0 +1,409 @@
+/**
+ * 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 org.apache.storm.jms.trident;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.Session;
+
+import org.apache.storm.jms.JmsProvider;
+import org.apache.storm.jms.JmsTupleProducer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.storm.trident.operation.TridentCollector;
+import org.apache.storm.trident.spout.ITridentSpout;
+import org.apache.storm.trident.topology.TransactionAttempt;
+import org.apache.storm.Config;
+import org.apache.storm.generated.StreamInfo;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsGetter;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.utils.RotatingMap;
+import org.apache.storm.utils.Utils;
+
+/**
+ * Trident implementation of the JmsSpout
+ * <p>
+ *
+ */
+public class TridentJmsSpout implements ITridentSpout<JmsBatch> {
+
+    public static final String MAX_BATCH_SIZE_CONF = "topology.spout.max.batch.size";
+    
+    public static final int DEFAULT_BATCH_SIZE = 1000;
+
+    private static final long serialVersionUID = -3469351154693356655L;
+    
+    private JmsTupleProducer tupleProducer;
+
+    private JmsProvider jmsProvider;
+
+    private int jmsAcknowledgeMode;
+
+    private String name;
+
+    private static int nameIndex = 1;
+    
+    /**
+     * Create a TridentJmsSpout with a default name and acknowledge mode of AUTO_ACKNOWLEDGE
+     */
+    public TridentJmsSpout() {
+        this.name = "JmsSpout_"+(nameIndex++);
+        this.jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
+    }
+    
+    /**
+     * Set the name for this spout, to improve log identification
+     * @param name The name to be used in log messages
+     * @return This spout
+     */
+    public TridentJmsSpout named(String name) {
+        this.name = name;
+        return this;
+    }
+    
+    /**
+     * Set the <code>JmsProvider</code>
+     * implementation that this Spout will use to connect to 
+     * a JMS <code>javax.jms.Desination</code>
+     * 
+     * @param provider
+     */
+    public TridentJmsSpout withJmsProvider(JmsProvider provider){
+        this.jmsProvider = provider;
+        return this;
+    }
+    
+    /**
+     * Set the <code>JmsTupleProducer</code>
+     * implementation that will convert <code>javax.jms.Message</code>
+     * object to <code>backtype.storm.tuple.Values</code> objects
+     * to be emitted.
+     * 
+     * @param tupleProducer
+     * @return This spout
+     */
+    public TridentJmsSpout withTupleProducer(JmsTupleProducer tupleProducer) {
+        this.tupleProducer = tupleProducer;
+        return this;
+    }
+    
+    /**
+     * Set the JMS acknowledge mode for messages being processed by this spout.
+     * <p/>
+     * Possible values:
+     * <ul>
+     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
+     * </ul>
+     * @param jmsAcknowledgeMode The chosen acknowledge mode
+     * @return This spout
+     * @throws IllegalArgumentException if the mode is not recognized
+     */
+    public TridentJmsSpout withJmsAcknowledgeMode(int jmsAcknowledgeMode) {
+        toDeliveryModeString(jmsAcknowledgeMode);
+        this.jmsAcknowledgeMode = jmsAcknowledgeMode;
+        return this;
+    }
+    
+    /**
+     * Return a friendly string for the given JMS acknowledge mode, or throw an IllegalArgumentException if
+     * the mode is not recognized.
+     * <p/>
+     * Possible values:
+     * <ul>
+     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
+     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
+     * </ul>
+     * @param acknowledgeMode A valid JMS acknowledge mode
+     * @return A friendly string describing the acknowledge mode
+     * @throws IllegalArgumentException if the mode is not recognized
+     */
+    private static final String toDeliveryModeString(int acknowledgeMode) {
+        switch (acknowledgeMode) {
+        case Session.AUTO_ACKNOWLEDGE:
+            return "AUTO_ACKNOWLEDGE";
+        case Session.CLIENT_ACKNOWLEDGE:
+            return "CLIENT_ACKNOWLEDGE";
+        case Session.DUPS_OK_ACKNOWLEDGE:
+            return "DUPS_OK_ACKNOWLEDGE";
+        default:
+            throw new IllegalArgumentException("Unknown JMS Acknowledge mode " + acknowledgeMode + " (See javax.jms.Session for valid values)");
+        }
+    }
+    
+    @Override
+    public ITridentSpout.BatchCoordinator<JmsBatch> getCoordinator(
+            String txStateId, @SuppressWarnings("rawtypes") Map conf, TopologyContext context) {
+        return new JmsBatchCoordinator(name);
+    }
+
+    @Override
+    public Emitter<JmsBatch> getEmitter(String txStateId, @SuppressWarnings("rawtypes") Map conf, TopologyContext context) {
+        return new JmsEmitter(name, jmsProvider, tupleProducer, jmsAcknowledgeMode, conf);
+    }
+
+    @Override
+    public Map<String, Object> getComponentConfiguration() {
+        return null;
+    }
+
+    @Override
+    public Fields getOutputFields() {
+        OutputFieldsGetter fieldGetter = new OutputFieldsGetter();
+        tupleProducer.declareOutputFields(fieldGetter);
+        StreamInfo streamInfo = fieldGetter.getFieldsDeclaration().get(Utils.DEFAULT_STREAM_ID);
+        if (streamInfo == null) {
+            throw new IllegalArgumentException("Jms Tuple producer has not declared output fields for the default stream");
+        }
+        
+        return new Fields(streamInfo.get_output_fields());
+    }
+    
+    /**
+     * The JmsEmitter class listens for incoming messages and stores them in a blocking queue. On each invocation of emit,
+     * the queued messages are emitted as a batch.
+     *
+     */
+    private class JmsEmitter implements Emitter<JmsBatch>, MessageListener {
+
+        private final LinkedBlockingQueue<Message> queue;
+        private final Connection connection;
+        private final Session session;
+
+        private final RotatingMap<Long, List<Message>> batchMessageMap; // Maps transaction Ids to JMS message ids.
+        
+        private final long rotateTimeMillis;
+        private final int maxBatchSize;
+        private final String name;
+        
+        private long lastRotate;
+       
+        private final Logger LOG = LoggerFactory.getLogger(JmsEmitter.class);
+ 
+        public JmsEmitter(String name, JmsProvider jmsProvider, JmsTupleProducer tupleProducer, int jmsAcknowledgeMode, @SuppressWarnings("rawtypes") Map conf) {
+            if (jmsProvider == null) {
+                throw new IllegalStateException("JMS provider has not been set.");
+            }
+            if (tupleProducer == null) {
+                throw new IllegalStateException("JMS Tuple Producer has not been set.");
+            }
+
+            this.queue = new LinkedBlockingQueue<Message>();
+            this.name = name;
+            
+            batchMessageMap = new RotatingMap<Long, List<Message>>(3);
+            rotateTimeMillis = 1000L * ((Number)conf.get(Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS)).intValue();
+            lastRotate = System.currentTimeMillis();
+            
+            Number batchSize = (Number) conf.get(MAX_BATCH_SIZE_CONF);
+            maxBatchSize = batchSize != null ? batchSize.intValue() : DEFAULT_BATCH_SIZE;
+
+            try {
+                ConnectionFactory cf = jmsProvider.connectionFactory();
+                Destination dest = jmsProvider.destination();
+                this.connection = cf.createConnection();
+                this.session = connection.createSession(false, jmsAcknowledgeMode);
+                MessageConsumer consumer = session.createConsumer(dest);
+                consumer.setMessageListener(this);
+                this.connection.start();
+
+                LOG.info("Created JmsEmitter with max batch size "+maxBatchSize+" rotate time "+rotateTimeMillis+"ms and destination "+dest+" for "+name);
+
+            } catch (Exception e) {
+                LOG.warn("Error creating JMS connection.", e);
+                throw new IllegalStateException("Could not create JMS connection for spout ", e);
+            }
+            
+        }
+        
+        @Override
+        public void success(TransactionAttempt tx) {
+            
+            @SuppressWarnings("unchecked")
+            List<Message> messages = (List<Message>) batchMessageMap.remove(tx.getTransactionId());
+            
+            if (messages != null) {
+                if (!messages.isEmpty()) {
+                    LOG.debug("Success for batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" for "+name);
+                }
+                
+                for (Message msg: messages) {
+                    String messageId = "UnknownId";
+                    
+                    try {
+                        messageId = msg.getJMSMessageID();
+                        msg.acknowledge();
+                        LOG.trace("Acknowledged message "+messageId);
+                    } catch (JMSException e) {
+                        LOG.warn("Failed to acknowledge message "+messageId, e);
+                    }
+                }
+            }
+            else {
+                LOG.warn("No messages found in batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId());
+            }
+        }
+
+        /**
+         * Fail a batch with the given transaction id. This is called when a batch is timed out, or a new batch with a 
+         * matching transaction id is emitted. Note that the current implementation does nothing - i.e. it discards 
+         * messages that have been failed.
+         * @param transactionId The transaction id of the failed batch
+         * @param messages The list of messages to fail.
+         */
+        private void fail(Long transactionId, List<Message> messages) {
+            LOG.debug("Failure for batch with transaction id "+transactionId+" for "+name);
+            if (messages != null) {
+                for (Message msg: messages) {
+                    try {
+                        LOG.trace("Failed message "+msg.getJMSMessageID());
+                    } catch (JMSException e) {
+                        LOG.warn("Could not identify failed message ", e);
+                    }
+                }
+            }
+            else {
+                LOG.warn("Failed batch has no messages with transaction id "+transactionId);
+            }            
+        }
+
+        @Override
+        public void close() {
+            try {
+                LOG.info("Closing JMS connection.");
+                this.session.close();
+                this.connection.close();
+            } catch (JMSException e) {
+                LOG.warn("Error closing JMS connection.", e);
+            }   
+        }
+
+        @Override
+        public void emitBatch(TransactionAttempt tx, JmsBatch coordinatorMeta,
+                TridentCollector collector) {
+            
+            long now = System.currentTimeMillis();
+            if(now - lastRotate > rotateTimeMillis) {
+                Map<Long, List<Message>> failed = batchMessageMap.rotate();
+                for(Long id: failed.keySet()) {
+                    LOG.warn("TIMED OUT batch with transaction id "+id+" for "+name);
+                    fail(id, failed.get(id));
+                }
+                lastRotate = now;
+            }
+            
+            if(batchMessageMap.containsKey(tx.getTransactionId())) {
+                LOG.warn("FAILED duplicate batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" for "+name);
+                fail(tx.getTransactionId(), batchMessageMap.get(tx.getTransactionId()));
+            }
+            
+            List<Message> batchMessages = new ArrayList<Message>();
+            
+            for (int index=0; index<maxBatchSize; index++) {
+                Message msg = queue.poll();
+                if (msg == null) {
+                    Utils.sleep(50); // Back off
+                    break;
+                }
+                
+                try {
+                    if (TridentJmsSpout.this.jmsAcknowledgeMode != Session.AUTO_ACKNOWLEDGE) {
+                        batchMessages.add(msg);
+                    }
+                    Values tuple = tupleProducer.toTuple(msg);
+                    collector.emit(tuple);
+                } catch (JMSException e) {
+                    LOG.warn("Failed to emit message, could not retrieve data for "+name+": "+e );
+                }
+            }
+            
+            if (!batchMessages.isEmpty()) {
+                LOG.debug("Emitting batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" and size "+batchMessages.size()+" for "+name);
+            }
+            else {
+                LOG.trace("No items to acknowledge for batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" for "+name);
+            }
+            batchMessageMap.put(tx.getTransactionId(), batchMessages);
+        }
+
+        @Override
+        public void onMessage(Message msg) {
+            try {
+                LOG.trace("Queuing msg [" + msg.getJMSMessageID() + "]");
+            } catch (JMSException e) {
+                // Nothing here, could not get message id
+            }
+            this.queue.offer(msg);
+        }
+        
+    }
+    
+    /**
+     * Bare implementation of a BatchCoordinator, returning a null JmsBatch object
+     *
+     */
+    private class JmsBatchCoordinator implements BatchCoordinator<JmsBatch> {
+
+        private final String name;
+        
+        private final Logger LOG = LoggerFactory.getLogger(JmsBatchCoordinator.class);
+
+        public JmsBatchCoordinator(String name) {
+            this.name = name;
+            LOG.info("Created batch coordinator for "+name);
+        }
+        
+        @Override
+        public JmsBatch initializeTransaction(long txid, JmsBatch prevMetadata, JmsBatch curMetadata) {
+            LOG.debug("Initialise transaction "+txid+" for "+name);
+            return null;
+        }
+
+        @Override
+        public void success(long txid) {
+        }
+
+        @Override
+        public boolean isReady(long txid) {
+            return true;
+        }
+
+        @Override
+        public void close() {
+        }
+        
+    }
+
+}
+
+    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java
new file mode 100644
index 0000000..e80f70a
--- /dev/null
+++ b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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 org.apache.storm.jms.spout;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.storm.jms.JmsProvider;
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JmsSpoutTest {
+    private static final Logger LOG = LoggerFactory.getLogger(JmsSpoutTest.class);
+
+    @Test
+    public void testFailure() throws JMSException, Exception{
+        JmsSpout spout = new JmsSpout();
+        JmsProvider mockProvider = new MockJmsProvider();
+        MockSpoutOutputCollector mockCollector = new MockSpoutOutputCollector();
+        SpoutOutputCollector collector = new SpoutOutputCollector(mockCollector);
+        spout.setJmsProvider(new MockJmsProvider());
+        spout.setJmsTupleProducer(new MockTupleProducer());
+        spout.setJmsAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
+        spout.setRecoveryPeriod(10); // Rapid recovery for testing.
+        spout.open(new HashMap<String,String>(), null, collector);
+        Message msg = this.sendMessage(mockProvider.connectionFactory(), mockProvider.destination());
+        Thread.sleep(100);
+        spout.nextTuple(); // Pretend to be storm.
+        Assert.assertTrue(mockCollector.emitted);
+        
+        mockCollector.reset();        
+        spout.fail(msg.getJMSMessageID()); // Mock failure
+        Thread.sleep(5000);
+        spout.nextTuple(); // Pretend to be storm.
+        Thread.sleep(5000);
+        Assert.assertTrue(mockCollector.emitted); // Should have been re-emitted
+    }
+
+    @Test
+    public void testSerializability() throws IOException{
+        JmsSpout spout = new JmsSpout();
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(out);
+        oos.writeObject(spout);
+        oos.close();
+        Assert.assertTrue(out.toByteArray().length > 0);
+    }
+    
+    public Message sendMessage(ConnectionFactory connectionFactory, Destination destination) throws JMSException {        
+        Session mySess = connectionFactory.createConnection().createSession(false, Session.CLIENT_ACKNOWLEDGE);
+        MessageProducer producer = mySess.createProducer(destination);
+        TextMessage msg = mySess.createTextMessage();
+        msg.setText("Hello World");
+        LOG.info("Sending Message: {}", msg.getText());
+        producer.send(msg);
+        return msg;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java
new file mode 100644
index 0000000..3ba0853
--- /dev/null
+++ b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java
@@ -0,0 +1,62 @@
+/*
+ * 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 org.apache.storm.jms.spout;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+
+import org.apache.storm.jms.JmsProvider;
+
+public class MockJmsProvider implements JmsProvider {
+    private static final long serialVersionUID = 1L;
+
+    private ConnectionFactory connectionFactory = null;
+    private Destination destination = null;
+    
+    public MockJmsProvider() throws NamingException{
+        this.connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); 
+        Context jndiContext = new InitialContext();
+        this.destination = (Destination) jndiContext.lookup("dynamicQueues/FOO.BAR");        
+
+    }
+    
+    /**
+     * Provides the JMS <code>ConnectionFactory</code>
+     * @return the connection factory
+     * @throws Exception
+     */
+    public ConnectionFactory connectionFactory() throws Exception{
+        return this.connectionFactory;
+    }
+
+    /**
+     * Provides the <code>Destination</code> (topic or queue) from which the
+     * <code>JmsSpout</code> will receive messages.
+     * @return
+     * @throws Exception
+     */
+    public Destination destination() throws Exception{
+        return this.destination;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java
new file mode 100644
index 0000000..a5a6c51
--- /dev/null
+++ b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java
@@ -0,0 +1,55 @@
+/*
+ * 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 org.apache.storm.jms.spout;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.storm.spout.ISpoutOutputCollector;
+
+public class MockSpoutOutputCollector implements ISpoutOutputCollector {
+    boolean emitted = false;
+
+    @Override
+    public List<Integer> emit(String streamId, List<Object> tuple, Object messageId) {
+        emitted = true;
+        return new ArrayList<Integer>();
+    }
+
+    @Override
+    public void emitDirect(int taskId, String streamId, List<Object> tuple, Object messageId) {
+        emitted = true;
+    }
+
+    @Override
+    public void reportError(Throwable error) {
+    }
+
+    public boolean emitted(){
+        return this.emitted;
+    }
+
+    public void reset(){
+        this.emitted = false;
+    }
+
+    @Override
+    public long getPendingCount() {
+        return 0;
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java
new file mode 100644
index 0000000..ea571fc
--- /dev/null
+++ b/external/storm-jms/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java
@@ -0,0 +1,47 @@
+/*
+ * 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 org.apache.storm.jms.spout;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.TextMessage;
+
+import org.apache.storm.jms.JmsTupleProducer;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+
+public class MockTupleProducer implements JmsTupleProducer {
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public Values toTuple(Message msg) throws JMSException {
+        if (msg instanceof TextMessage) {
+            String json = ((TextMessage) msg).getText();
+            return new Values(json);
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields("json"));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/src/test/resources/jndi.properties
----------------------------------------------------------------------
diff --git a/external/storm-jms/src/test/resources/jndi.properties b/external/storm-jms/src/test/resources/jndi.properties
new file mode 100644
index 0000000..af19521
--- /dev/null
+++ b/external/storm-jms/src/test/resources/jndi.properties
@@ -0,0 +1,18 @@
+# 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.
+
+java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
+java.naming.provider.url = vm://localhost?broker.persistent=false
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-kafka-client/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-kafka-client/pom.xml b/external/storm-kafka-client/pom.xml
index 2ff98c1..02c2823 100644
--- a/external/storm-kafka-client/pom.xml
+++ b/external/storm-kafka-client/pom.xml
@@ -46,7 +46,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <!--kafka libraries-->
         <dependency>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-kafka/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-kafka/pom.xml b/external/storm-kafka/pom.xml
index 9c69c05..6571a21 100644
--- a/external/storm-kafka/pom.xml
+++ b/external/storm-kafka/pom.xml
@@ -126,7 +126,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>commons-lang</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-kinesis/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-kinesis/pom.xml b/external/storm-kinesis/pom.xml
index f1872dc..763d9c2 100644
--- a/external/storm-kinesis/pom.xml
+++ b/external/storm-kinesis/pom.xml
@@ -42,7 +42,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.curator</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-metrics/pom.xml b/external/storm-metrics/pom.xml
index 24b34e8..ef51c56 100644
--- a/external/storm-metrics/pom.xml
+++ b/external/storm-metrics/pom.xml
@@ -60,7 +60,7 @@
       <artifactId>storm-core</artifactId>
       <version>${project.version}</version>
       <!-- keep storm out of the jar-with-dependencies -->
-      <scope>provided</scope>
+      <scope>${provided.scope}</scope>
     </dependency>
   </dependencies>
   <build>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mongodb/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-mongodb/pom.xml b/external/storm-mongodb/pom.xml
index 7653ac8..47b6f63 100644
--- a/external/storm-mongodb/pom.xml
+++ b/external/storm-mongodb/pom.xml
@@ -1,74 +1,74 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>storm</artifactId>
-        <groupId>org.apache.storm</groupId>
-        <version>2.0.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>storm-mongodb</artifactId>
-
-    <developers>
-        <developer>
-            <id>vesense</id>
-            <name>Xin Wang</name>
-            <email>data.xinwang@gmail.com</email>
-        </developer>
-    </developers>
-
-    <properties>
-        <mongodb.version>3.2.0</mongodb.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-core</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.mongodb</groupId>
-            <artifactId>mongo-java-driver</artifactId>
-            <version>${mongodb.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-        </dependency>
-        <!--test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>storm</artifactId>
+        <groupId>org.apache.storm</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>storm-mongodb</artifactId>
+
+    <developers>
+        <developer>
+            <id>vesense</id>
+            <name>Xin Wang</name>
+            <email>data.xinwang@gmail.com</email>
+        </developer>
+    </developers>
+
+    <properties>
+        <mongodb.version>3.2.0</mongodb.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-core</artifactId>
+            <version>${project.version}</version>
+            <scope>${provided.scope}</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongo-java-driver</artifactId>
+            <version>${mongodb.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+        </dependency>
+        <!--test dependencies -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>


[12/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
STORM-2416 Release Packaging Improvements


Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/2a369e40
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/2a369e40
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/2a369e40

Branch: refs/heads/master
Commit: 2a369e408c18adf1045f57382d30fe18dacdbb19
Parents: 28c8711
Author: P. Taylor Goetz <pt...@gmail.com>
Authored: Thu Mar 16 15:14:26 2017 -0400
Committer: Jungtaek Lim <ka...@gmail.com>
Committed: Tue Apr 4 18:37:10 2017 +0900

----------------------------------------------------------------------
 examples/flux-examples/README.md                |    93 +
 examples/flux-examples/pom.xml                  |   152 +
 .../flux/examples/StatefulWordCounter.java      |    64 +
 .../storm/flux/examples/TestPrintBolt.java      |    39 +
 .../storm/flux/examples/TestWindowBolt.java     |    47 +
 .../storm/flux/examples/WordCountClient.java    |    74 +
 .../apache/storm/flux/examples/WordCounter.java |    71 +
 .../src/main/resources/hbase_bolt.properties    |    18 +
 .../src/main/resources/hdfs_bolt.properties     |    26 +
 .../src/main/resources/kafka_spout.yaml         |   136 +
 .../src/main/resources/multilang.yaml           |    89 +
 .../src/main/resources/simple_hbase.yaml        |    92 +
 .../src/main/resources/simple_hdfs.yaml         |   105 +
 .../resources/simple_stateful_wordcount.yaml    |    60 +
 .../src/main/resources/simple_windowing.yaml    |    69 +
 .../src/main/resources/simple_wordcount.yaml    |    68 +
 examples/storm-elasticsearch-examples/pom.xml   |    15 -
 examples/storm-hbase-examples/pom.xml           |    14 -
 examples/storm-hdfs-examples/pom.xml            |    14 -
 examples/storm-hive-examples/pom.xml            |    14 -
 examples/storm-jdbc-examples/pom.xml            |    14 -
 examples/storm-jms-examples/README.markdown     |    12 +
 examples/storm-jms-examples/pom.xml             |   150 +
 .../storm/jms/example/ExampleJmsTopology.java   |   131 +
 .../apache/storm/jms/example/GenericBolt.java   |   116 +
 .../storm/jms/example/JsonTupleProducer.java    |    58 +
 .../storm/jms/example/SpringJmsProvider.java    |    74 +
 .../src/main/resources/jms-activemq.xml         |    53 +
 .../src/main/resources/log4j.properties         |    29 +
 examples/storm-kafka-client-examples/pom.xml    |    14 -
 examples/storm-kafka-examples/pom.xml           |    14 -
 examples/storm-mongodb-examples/pom.xml         |    14 -
 examples/storm-mqtt-examples/pom.xml            |    14 -
 examples/storm-opentsdb-examples/pom.xml        |    14 -
 examples/storm-perf/README.markdown             |    50 +
 examples/storm-perf/pom.xml                     |   107 +
 .../main/conf/ConstSpoutIdBoltNullBoltTopo.yaml |    22 +
 .../src/main/conf/ConstSpoutNullBoltTopo.yaml   |    22 +
 .../src/main/conf/FileReadWordCountTopo.yaml    |    23 +
 .../src/main/conf/HdfsSpoutNullBoltTopo.yaml    |    25 +
 .../storm-perf/src/main/conf/KafkaHdfsTopo.yaml |    26 +
 .../src/main/conf/KafkaSpoutNullBoltTopo.yaml   |    23 +
 .../src/main/conf/StrGenSpoutHdfsBoltTopo.yaml  |    25 +
 .../perf/ConstSpoutIdBoltNullBoltTopo.java      |   101 +
 .../storm/perf/ConstSpoutNullBoltTopo.java      |   107 +
 .../apache/storm/perf/ConstSpoutOnlyTopo.java   |    74 +
 .../storm/perf/FileReadWordCountTopo.java       |    96 +
 .../storm/perf/HdfsSpoutNullBoltTopo.java       |   101 +
 .../org/apache/storm/perf/KafkaHdfsTopo.java    |   168 +
 .../storm/perf/KafkaSpoutNullBoltTopo.java      |   114 +
 .../storm/perf/StrGenSpoutHdfsBoltTopo.java     |   154 +
 .../org/apache/storm/perf/bolt/CountBolt.java   |    58 +
 .../org/apache/storm/perf/bolt/DevNullBolt.java |    47 +
 .../java/org/apache/storm/perf/bolt/IdBolt.java |    49 +
 .../storm/perf/bolt/SplitSentenceBolt.java      |    58 +
 .../org/apache/storm/perf/spout/ConstSpout.java |    70 +
 .../apache/storm/perf/spout/FileReadSpout.java  |   141 +
 .../apache/storm/perf/spout/StringGenSpout.java |    93 +
 .../storm/perf/utils/BasicMetricsCollector.java |   309 +
 .../org/apache/storm/perf/utils/Helper.java     |   131 +
 .../apache/storm/perf/utils/IdentityBolt.java   |    51 +
 .../apache/storm/perf/utils/MetricsSample.java  |   248 +
 .../src/main/sampledata/randomwords.txt         | 14049 +++++++++++++++++
 examples/storm-pmml-examples/pom.xml            |    14 -
 examples/storm-redis-examples/pom.xml           |    14 -
 examples/storm-solr-examples/pom.xml            |    14 -
 examples/storm-starter/pom.xml                  |    11 -
 external/flux/flux-examples/README.md           |    93 -
 external/flux/flux-examples/pom.xml             |   146 -
 .../flux/examples/StatefulWordCounter.java      |    64 -
 .../storm/flux/examples/TestPrintBolt.java      |    39 -
 .../storm/flux/examples/TestWindowBolt.java     |    47 -
 .../storm/flux/examples/WordCountClient.java    |    74 -
 .../apache/storm/flux/examples/WordCounter.java |    71 -
 .../src/main/resources/hbase_bolt.properties    |    18 -
 .../src/main/resources/hdfs_bolt.properties     |    26 -
 .../src/main/resources/kafka_spout.yaml         |   136 -
 .../src/main/resources/multilang.yaml           |    89 -
 .../src/main/resources/simple_hbase.yaml        |    92 -
 .../src/main/resources/simple_hdfs.yaml         |   105 -
 .../resources/simple_stateful_wordcount.yaml    |    60 -
 .../src/main/resources/simple_windowing.yaml    |    69 -
 .../src/main/resources/simple_wordcount.yaml    |    68 -
 external/flux/pom.xml                           |    21 -
 external/sql/storm-sql-core/pom.xml             |     4 +-
 .../storm-sql-external/storm-sql-hdfs/pom.xml   |     6 +-
 .../storm-sql-external/storm-sql-kafka/pom.xml  |     6 +-
 .../storm-sql-mongodb/pom.xml                   |     6 +-
 .../storm-sql-external/storm-sql-redis/pom.xml  |     6 +-
 external/sql/storm-sql-runtime/pom.xml          |     2 +-
 external/storm-cassandra/pom.xml                |     2 +-
 external/storm-druid/pom.xml                    |    42 +-
 external/storm-elasticsearch/pom.xml            |     2 +-
 external/storm-eventhubs/pom.xml                |    86 +-
 external/storm-hbase/pom.xml                    |     2 +-
 external/storm-hdfs/pom.xml                     |     2 +-
 external/storm-hive/pom.xml                     |     2 +-
 external/storm-jdbc/pom.xml                     |     2 +-
 external/storm-jms/core/pom.xml                 |    95 -
 .../apache/storm/jms/JmsMessageProducer.java    |    46 -
 .../java/org/apache/storm/jms/JmsProvider.java  |    48 -
 .../org/apache/storm/jms/JmsTupleProducer.java  |    58 -
 .../java/org/apache/storm/jms/bolt/JmsBolt.java |   219 -
 .../apache/storm/jms/spout/JmsMessageID.java    |    58 -
 .../org/apache/storm/jms/spout/JmsSpout.java    |   382 -
 .../org/apache/storm/jms/trident/JmsBatch.java  |    27 -
 .../org/apache/storm/jms/trident/JmsState.java  |   129 -
 .../storm/jms/trident/JmsStateFactory.java      |    40 -
 .../apache/storm/jms/trident/JmsUpdater.java    |    38 -
 .../storm/jms/trident/TridentJmsSpout.java      |   409 -
 .../apache/storm/jms/spout/JmsSpoutTest.java    |    88 -
 .../apache/storm/jms/spout/MockJmsProvider.java |    62 -
 .../jms/spout/MockSpoutOutputCollector.java     |    55 -
 .../storm/jms/spout/MockTupleProducer.java      |    47 -
 .../core/src/test/resources/jndi.properties     |    18 -
 external/storm-jms/examples/README.markdown     |    12 -
 external/storm-jms/examples/pom.xml             |   150 -
 .../storm/jms/example/ExampleJmsTopology.java   |   131 -
 .../apache/storm/jms/example/GenericBolt.java   |   116 -
 .../storm/jms/example/JsonTupleProducer.java    |    58 -
 .../storm/jms/example/SpringJmsProvider.java    |    74 -
 .../src/main/resources/jms-activemq.xml         |    53 -
 .../src/main/resources/log4j.properties         |    29 -
 external/storm-jms/pom.xml                      |    48 +-
 .../apache/storm/jms/JmsMessageProducer.java    |    46 +
 .../java/org/apache/storm/jms/JmsProvider.java  |    48 +
 .../org/apache/storm/jms/JmsTupleProducer.java  |    58 +
 .../java/org/apache/storm/jms/bolt/JmsBolt.java |   219 +
 .../apache/storm/jms/spout/JmsMessageID.java    |    58 +
 .../org/apache/storm/jms/spout/JmsSpout.java    |   382 +
 .../org/apache/storm/jms/trident/JmsBatch.java  |    27 +
 .../org/apache/storm/jms/trident/JmsState.java  |   129 +
 .../storm/jms/trident/JmsStateFactory.java      |    40 +
 .../apache/storm/jms/trident/JmsUpdater.java    |    38 +
 .../storm/jms/trident/TridentJmsSpout.java      |   409 +
 .../apache/storm/jms/spout/JmsSpoutTest.java    |    88 +
 .../apache/storm/jms/spout/MockJmsProvider.java |    62 +
 .../jms/spout/MockSpoutOutputCollector.java     |    55 +
 .../storm/jms/spout/MockTupleProducer.java      |    47 +
 .../src/test/resources/jndi.properties          |    18 +
 external/storm-kafka-client/pom.xml             |     2 +-
 external/storm-kafka/pom.xml                    |     2 +-
 external/storm-kinesis/pom.xml                  |     2 +-
 external/storm-metrics/pom.xml                  |     2 +-
 external/storm-mongodb/pom.xml                  |   148 +-
 external/storm-mqtt/core/pom.xml                |   126 -
 .../java/org/apache/storm/mqtt/MqttLogger.java  |    36 -
 .../java/org/apache/storm/mqtt/MqttMessage.java |    41 -
 .../apache/storm/mqtt/MqttMessageMapper.java    |    44 -
 .../org/apache/storm/mqtt/MqttTupleMapper.java  |    37 -
 .../org/apache/storm/mqtt/bolt/MqttBolt.java    |   105 -
 .../apache/storm/mqtt/common/MqttOptions.java   |   334 -
 .../apache/storm/mqtt/common/MqttPublisher.java |    67 -
 .../org/apache/storm/mqtt/common/MqttUtils.java |    88 -
 .../org/apache/storm/mqtt/common/SslUtils.java  |    64 -
 .../mqtt/mappers/ByteArrayMessageMapper.java    |    34 -
 .../storm/mqtt/mappers/StringMessageMapper.java |    37 -
 .../apache/storm/mqtt/spout/AckableMessage.java |    71 -
 .../org/apache/storm/mqtt/spout/MqttSpout.java  |   262 -
 .../storm/mqtt/ssl/DefaultKeyStoreLoader.java   |    97 -
 .../apache/storm/mqtt/ssl/KeyStoreLoader.java   |    35 -
 .../storm/mqtt/trident/MqttPublishFunction.java |    85 -
 .../storm/mqtt/StormMqttIntegrationTest.java    |   153 -
 external/storm-mqtt/pom.xml                     |   144 +-
 .../java/org/apache/storm/mqtt/MqttLogger.java  |    36 +
 .../java/org/apache/storm/mqtt/MqttMessage.java |    41 +
 .../apache/storm/mqtt/MqttMessageMapper.java    |    44 +
 .../org/apache/storm/mqtt/MqttTupleMapper.java  |    37 +
 .../org/apache/storm/mqtt/bolt/MqttBolt.java    |   105 +
 .../apache/storm/mqtt/common/MqttOptions.java   |   334 +
 .../apache/storm/mqtt/common/MqttPublisher.java |    67 +
 .../org/apache/storm/mqtt/common/MqttUtils.java |    88 +
 .../org/apache/storm/mqtt/common/SslUtils.java  |    64 +
 .../mqtt/mappers/ByteArrayMessageMapper.java    |    34 +
 .../storm/mqtt/mappers/StringMessageMapper.java |    37 +
 .../apache/storm/mqtt/spout/AckableMessage.java |    71 +
 .../org/apache/storm/mqtt/spout/MqttSpout.java  |   262 +
 .../storm/mqtt/ssl/DefaultKeyStoreLoader.java   |    97 +
 .../apache/storm/mqtt/ssl/KeyStoreLoader.java   |    35 +
 .../storm/mqtt/trident/MqttPublishFunction.java |    85 +
 .../storm/mqtt/StormMqttIntegrationTest.java    |   153 +
 external/storm-opentsdb/pom.xml                 |     2 +-
 external/storm-pmml/pom.xml                     |     2 +-
 external/storm-redis/pom.xml                    |     2 +-
 external/storm-solr/pom.xml                     |     2 +-
 pom.xml                                         |    18 +-
 .../final-package/src/main/assembly/binary.xml  |   254 +-
 storm-perf/README.markdown                      |    50 -
 storm-perf/pom.xml                              |   122 -
 .../main/conf/ConstSpoutIdBoltNullBoltTopo.yaml |    22 -
 .../src/main/conf/ConstSpoutNullBoltTopo.yaml   |    22 -
 .../src/main/conf/FileReadWordCountTopo.yaml    |    23 -
 .../src/main/conf/HdfsSpoutNullBoltTopo.yaml    |    25 -
 storm-perf/src/main/conf/KafkaHdfsTopo.yaml     |    26 -
 .../src/main/conf/KafkaSpoutNullBoltTopo.yaml   |    23 -
 .../src/main/conf/StrGenSpoutHdfsBoltTopo.yaml  |    25 -
 .../perf/ConstSpoutIdBoltNullBoltTopo.java      |   101 -
 .../storm/perf/ConstSpoutNullBoltTopo.java      |   107 -
 .../apache/storm/perf/ConstSpoutOnlyTopo.java   |    74 -
 .../storm/perf/FileReadWordCountTopo.java       |    96 -
 .../storm/perf/HdfsSpoutNullBoltTopo.java       |   101 -
 .../org/apache/storm/perf/KafkaHdfsTopo.java    |   168 -
 .../storm/perf/KafkaSpoutNullBoltTopo.java      |   114 -
 .../storm/perf/StrGenSpoutHdfsBoltTopo.java     |   154 -
 .../org/apache/storm/perf/bolt/CountBolt.java   |    58 -
 .../org/apache/storm/perf/bolt/DevNullBolt.java |    47 -
 .../java/org/apache/storm/perf/bolt/IdBolt.java |    49 -
 .../storm/perf/bolt/SplitSentenceBolt.java      |    58 -
 .../org/apache/storm/perf/spout/ConstSpout.java |    70 -
 .../apache/storm/perf/spout/FileReadSpout.java  |   141 -
 .../apache/storm/perf/spout/StringGenSpout.java |    93 -
 .../storm/perf/utils/BasicMetricsCollector.java |   309 -
 .../org/apache/storm/perf/utils/Helper.java     |   131 -
 .../apache/storm/perf/utils/IdentityBolt.java   |    51 -
 .../apache/storm/perf/utils/MetricsSample.java  |   248 -
 storm-perf/src/main/sampledata/randomwords.txt  | 14049 -----------------
 216 files changed, 21999 insertions(+), 22608 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/README.md
----------------------------------------------------------------------
diff --git a/examples/flux-examples/README.md b/examples/flux-examples/README.md
new file mode 100644
index 0000000..3d610b4
--- /dev/null
+++ b/examples/flux-examples/README.md
@@ -0,0 +1,93 @@
+# Flux Examples
+A collection of examples illustrating various capabilities.
+
+## Building From Source and Running
+
+Checkout the projects source and perform a top level Maven build (i.e. from the `flux` directory):
+
+```bash
+git clone https://github.com/apache/storm.git
+cd storm
+mvn install -DskipTests=true
+```
+
+This will create a shaded (i.e. "fat" or "uber") jar in the `external/flux/flux-examples/target` directory that can run/deployed with
+the `storm` command:
+
+```bash
+cd flux-examples
+storm jar ./target/flux-examples-*-SNAPSHOT.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_wordcount.yaml
+```
+
+The example YAML files are also packaged in the examples jar, so they can also be referenced with Flux's `--resource`
+command line switch:
+
+```bash
+storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local --resource /simple_wordcount.yaml
+```
+
+## Available Examples
+
+### [simple_wordcount.yaml](src/main/resources/simple_wordcount.yaml)
+
+This is a very basic wordcount example using Java spouts and bolts. It simply logs the running count of each word
+received.
+
+### [multilang.yaml](src/main/resources/multilang.yaml)
+
+Another wordcount example that uses a spout written in JavaScript (node.js), a bolt written in Python, and two bolts
+written in java.
+
+### [kafka_spout.yaml](src/main/resources/kafka_spout.yaml)
+
+This example illustrates how to configure Storm's `storm-kafka` spout using Flux YAML DSL `components`, `references`,
+and `constructor arguments` constructs.
+
+### [simple_hdfs.yaml](src/main/resources/simple_hdfs.yaml)
+
+This example demonstrates using Flux to setup a storm-hdfs bolt to write to an HDFS cluster. It also demonstrates Flux's
+variable substitution/filtering feature.
+
+To run the `simple_hdfs.yaml` example, copy the `hdfs_bolt.properties` file to a convenient location and change, at
+least, the property `hdfs.url` to point to a HDFS cluster. Then you can run the example something like:
+
+```bash
+storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_hdfs.yaml --filter my_hdfs_bolt.properties
+```
+
+### [simple_hbase.yaml](src/main/resources/simple_hbase.yaml)
+
+This example illustrates how to use Flux to setup a storm-hbase bolt to write to HBase.
+
+To run the `simple_hbase.yaml` example, copy the `hbase_bolt.properties` file to a convenient location and change the properties
+ `hbase.rootdir` and `hbase.zookeeper.quorum`. Then you can run the example something like:
+
+```bash
+storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_hbase.yaml --filter my_hbase_bolt.properties
+```
+
+### [simple_windowing.yaml](src/main/resources/simple_windowing.yaml)
+
+This example illustrates how to use Flux to set up a storm topology that contains windowing operations.
+
+To run,
+
+```bash
+storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_windowing.yaml
+```
+
+### [simple_stateful_wordcount.yaml](src/main/resources/simple_stateful_wordcount.yaml)
+
+Flux also supports stateful bolts which is illustrated with this example. It is basically an extension of the basic wordcount example.
+The state is periodically saved (checkpointed) and restored when the topology is restarted.
+
+```bash
+storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_stateful_wordcount.yaml
+```
+
+By default the state is stored in-memory only. As such you won't see a resumed state unless you configure to use Redis as the state backend.
+Ensure that you have Redis running at `localhost:6379` and that `storm-redis-*.jar` is in the classpath.
+
+```bash
+STORM_EXT_CLASSPATH=../../storm-redis/target storm jar ./target/flux-examples-*.jar -c topology.state.provider=org.apache.storm.redis.state.RedisKeyValueStateProvider org.apache.storm.flux.Flux --local ./src/main/resources/simple_stateful_wordcount.yaml
+```

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/pom.xml b/examples/flux-examples/pom.xml
new file mode 100644
index 0000000..14ad00c
--- /dev/null
+++ b/examples/flux-examples/pom.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>storm</artifactId>
+        <groupId>org.apache.storm</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>flux-examples</artifactId>
+    <packaging>jar</packaging>
+
+    <name>flux-examples</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-core</artifactId>
+            <version>${project.version}</version>
+            <scope>${provided.scope}</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>flux-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>flux-wrappers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-hdfs</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>commons-beanutils</groupId>
+                    <artifactId>commons-beanutils-core</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-beanutils</groupId>
+                    <artifactId>commons-beanutils</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.hadoop</groupId>
+                    <artifactId>hadoop-yarn-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>javax.servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-hbase</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.mortbay.jetty</groupId>
+                    <artifactId>servlet-api-2.5</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-collections</groupId>
+                    <artifactId>commons-collections</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-kafka</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>${storm.kafka.artifact.id}</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <createDependencyReducedPom>true</createDependencyReducedPom>
+                    <filters>
+                        <filter>
+                            <artifact>*:*</artifact>
+                            <excludes>
+                                <exclude>META-INF/*.SF</exclude>
+                                <exclude>META-INF/*.sf</exclude>
+                                <exclude>META-INF/*.DSA</exclude>
+                                <exclude>META-INF/*.dsa</exclude>
+                                <exclude>META-INF/*.RSA</exclude>
+                                <exclude>META-INF/*.rsa</exclude>
+                                <exclude>META-INF/*.EC</exclude>
+                                <exclude>META-INF/*.ec</exclude>
+                                <exclude>META-INF/MSFTSIG.SF</exclude>
+                                <exclude>META-INF/MSFTSIG.RSA</exclude>
+                            </excludes>
+                        </filter>
+                    </filters>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <transformers>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <mainClass>org.apache.storm.flux.Flux</mainClass>
+                                </transformer>
+                            </transformers>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java
new file mode 100644
index 0000000..5534888
--- /dev/null
+++ b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java
@@ -0,0 +1,64 @@
+/*
+ * 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 org.apache.storm.flux.examples;
+
+import org.apache.storm.state.KeyValueState;
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.base.BaseStatefulBolt;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.tuple.Values;
+
+import java.util.Map;
+
+public class StatefulWordCounter extends BaseStatefulBolt<KeyValueState<String, Long>> {
+
+    private KeyValueState<String, Long> wordCounts;
+    private OutputCollector collector;
+
+    @SuppressWarnings("rawtypes")
+    @Override
+    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
+        this.collector = collector;
+    }
+
+    @Override
+    public void initState(KeyValueState<String, Long> state) {
+        wordCounts = state;
+    }
+
+    @Override
+    public void execute(Tuple tuple) {
+        String word = tuple.getString(0);
+
+        Long count = wordCounts.get(word, 0L);
+        count++;
+        wordCounts.put(word, count);
+
+        collector.emit(tuple, new Values(word, count));
+        collector.ack(tuple);
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields("word", "count"));
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java
new file mode 100644
index 0000000..137e354
--- /dev/null
+++ b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.storm.flux.examples;
+
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseBasicBolt;
+import org.apache.storm.tuple.Tuple;
+
+/**
+ * Prints the tuples to stdout
+ */
+public class TestPrintBolt extends BaseBasicBolt {
+
+    @Override
+    public void execute(Tuple tuple, BasicOutputCollector collector) {
+        System.out.println(tuple);
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer ofd) {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java
new file mode 100644
index 0000000..8c904d9
--- /dev/null
+++ b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java
@@ -0,0 +1,47 @@
+/*
+ * 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 org.apache.storm.flux.examples;
+
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseWindowedBolt;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.windowing.TupleWindow;
+
+import java.util.Map;
+
+public class TestWindowBolt extends BaseWindowedBolt {
+    private OutputCollector collector;
+
+    @Override
+    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
+        this.collector = collector;
+    }
+
+    @Override
+    public void execute(TupleWindow inputWindow) {
+        collector.emit(new Values(inputWindow.get().size()));
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields("count"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java
new file mode 100644
index 0000000..eb4fb7a
--- /dev/null
+++ b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java
@@ -0,0 +1,74 @@
+/**
+ * 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 org.apache.storm.flux.examples;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseConfiguration;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.util.Bytes;
+
+import java.io.FileInputStream;
+import java.util.Properties;
+
+/**
+ * Connects to the 'WordCount' HBase table and prints counts for each word.
+ *
+ * Assumes you have run (or are running) the YAML topology definition in
+ * <code>simple_hbase.yaml</code>
+ *
+ * You will also need to modify `src/main/resources/hbase-site.xml`
+ * to point to your HBase instance, and then repackage with `mvn package`.
+ * This is a known issue.
+ *
+ */
+public class WordCountClient {
+
+    public static void main(String[] args) throws Exception {
+        Configuration config = HBaseConfiguration.create();
+        if(args.length == 1){
+            Properties props = new Properties();
+            props.load(new FileInputStream(args[0]));
+            System.out.println("HBase configuration:");
+            for(Object key : props.keySet()) {
+                System.out.println(key + "=" + props.get(key));
+                config.set((String)key, props.getProperty((String)key));
+            }
+        } else {
+            System.out.println("Usage: WordCountClient <hbase_config.properties>");
+            System.exit(1);
+        }
+
+        HTable table = new HTable(config, "WordCount");
+        String[] words = new String[] {"nathan", "mike", "jackson", "golda", "bertels"};
+
+        for (String word : words) {
+            Get get = new Get(Bytes.toBytes(word));
+            Result result = table.get(get);
+
+            byte[] countBytes = result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("count"));
+            byte[] wordBytes = result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("word"));
+
+            String wordStr = Bytes.toString(wordBytes);
+            long count = Bytes.toLong(countBytes);
+            System.out.println("Word: '" + wordStr + "', Count: " + count);
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java
new file mode 100644
index 0000000..7093105
--- /dev/null
+++ b/examples/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java
@@ -0,0 +1,71 @@
+/**
+ * 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 org.apache.storm.flux.examples;
+
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.IBasicBolt;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseBasicBolt;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+import static org.apache.storm.utils.Utils.tuple;
+
+/**
+ * This bolt is used by the HBase example. It simply emits the first field
+ * found in the incoming tuple as "word", with a "count" of `1`.
+ *
+ * In this case, the downstream HBase bolt handles the counting, so a value
+ * of `1` will just increment the HBase counter by one.
+ */
+public class WordCounter extends BaseBasicBolt {
+    private static final Logger LOG = LoggerFactory.getLogger(WordCounter.class);
+
+
+
+    @SuppressWarnings("rawtypes")
+    public void prepare(Map stormConf, TopologyContext context) {
+    }
+
+    /*
+     * Just output the word value with a count of 1.
+     * The HBaseBolt will handle incrementing the counter.
+     */
+    public void execute(Tuple input, BasicOutputCollector collector) {
+        collector.emit(tuple(input.getValues().get(0), 1));
+    }
+
+    public void cleanup() {
+
+    }
+
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields("word", "count"));
+    }
+
+    @Override
+    public Map<String, Object> getComponentConfiguration() {
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/hbase_bolt.properties
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/hbase_bolt.properties b/examples/flux-examples/src/main/resources/hbase_bolt.properties
new file mode 100644
index 0000000..f8ed50c
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/hbase_bolt.properties
@@ -0,0 +1,18 @@
+# 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.
+
+hbase.rootdir=hdfs://hadoop:54310/hbase
+hbase.zookeeper.quorum=hadoop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/hdfs_bolt.properties
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/hdfs_bolt.properties b/examples/flux-examples/src/main/resources/hdfs_bolt.properties
new file mode 100644
index 0000000..7bcbe7a
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/hdfs_bolt.properties
@@ -0,0 +1,26 @@
+# 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.
+
+
+# The HDFS url
+hdfs.url=hdfs://hadoop:54310
+
+# The HDFS directory where the bolt will write incoming data
+hdfs.write.dir=/incoming
+
+# The HDFS directory where files will be moved once the bolt has
+# finished writing to it.
+hdfs.dest.dir=/complete
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/kafka_spout.yaml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/kafka_spout.yaml b/examples/flux-examples/src/main/resources/kafka_spout.yaml
new file mode 100644
index 0000000..7533ce4
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/kafka_spout.yaml
@@ -0,0 +1,136 @@
+# 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.
+
+
+# Test ability to wire together shell spouts/bolts
+---
+
+# topology definition
+# name to be used when submitting
+name: "kafka-topology"
+
+# Components
+# Components are analagous to Spring beans. They are meant to be used as constructor,
+# property(setter), and builder arguments.
+#
+# for the time being, components must be declared in the order they are referenced
+components:
+  - id: "stringScheme"
+    className: "org.apache.storm.kafka.StringScheme"
+
+  - id: "stringMultiScheme"
+    className: "org.apache.storm.spout.SchemeAsMultiScheme"
+    constructorArgs:
+      - ref: "stringScheme"
+
+  - id: "zkHosts"
+    className: "org.apache.storm.kafka.ZkHosts"
+    constructorArgs:
+      - "localhost:2181"
+
+# Alternative kafka config
+#  - id: "kafkaConfig"
+#    className: "org.apache.storm.kafka.KafkaConfig"
+#    constructorArgs:
+#      # brokerHosts
+#      - ref: "zkHosts"
+#      # topic
+#      - "myKafkaTopic"
+#      # clientId (optional)
+#      - "myKafkaClientId"
+
+  - id: "spoutConfig"
+    className: "org.apache.storm.kafka.SpoutConfig"
+    constructorArgs:
+      # brokerHosts
+      - ref: "zkHosts"
+      # topic
+      - "myKafkaTopic"
+      # zkRoot
+      - "/kafkaSpout"
+      # id
+      - "myId"
+    properties:
+      - name: "ignoreZkOffsets"
+        value: true
+      - name: "scheme"
+        ref: "stringMultiScheme"
+
+
+
+# NOTE: We may want to consider some level of spring integration. For example, allowing component references
+# to a spring `ApplicationContext`.
+
+# topology configuration
+# this will be passed to the submitter as a map of config options
+#
+config:
+  topology.workers: 1
+  # ...
+
+# spout definitions
+spouts:
+  - id: "kafka-spout"
+    className: "org.apache.storm.kafka.KafkaSpout"
+    constructorArgs:
+      - ref: "spoutConfig"
+
+# bolt definitions
+bolts:
+  - id: "splitsentence"
+    className: "org.apache.storm.flux.wrappers.bolts.FluxShellBolt"
+    constructorArgs:
+      # command line
+      - ["python", "splitsentence.py"]
+      # output fields
+      - ["word"]
+    parallelism: 1
+    # ...
+
+  - id: "log"
+    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
+    parallelism: 1
+    # ...
+
+  - id: "count"
+    className: "org.apache.storm.testing.TestWordCounter"
+    parallelism: 1
+    # ...
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+# custom stream groupings are also supported
+
+streams:
+  - name: "kafka --> split" # name isn't used (placeholder for logging, UI, etc.)
+    from: "kafka-spout"
+    to: "splitsentence"
+    grouping:
+      type: SHUFFLE
+
+  - name: "split --> count"
+    from: "splitsentence"
+    to: "count"
+    grouping:
+      type: FIELDS
+      args: ["word"]
+
+  - name: "count --> log"
+    from: "count"
+    to: "log"
+    grouping:
+      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/multilang.yaml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/multilang.yaml b/examples/flux-examples/src/main/resources/multilang.yaml
new file mode 100644
index 0000000..aaab5d3
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/multilang.yaml
@@ -0,0 +1,89 @@
+# 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.
+
+# Test ability to wire together shell spouts/bolts
+---
+
+# topology definition
+# name to be used when submitting
+name: "shell-topology"
+
+# topology configuration
+# this will be passed to the submitter as a map of config options
+#
+config:
+  topology.workers: 1
+  # ...
+
+# spout definitions
+spouts:
+  - id: "sentence-spout"
+    className: "org.apache.storm.flux.wrappers.spouts.FluxShellSpout"
+    # shell spout constructor takes 2 arguments: String[], String[]
+    constructorArgs:
+      # command line
+      - ["node", "randomsentence.js"]
+      # output fields
+      - ["word"]
+    parallelism: 1
+    # ...
+
+# bolt definitions
+bolts:
+  - id: "splitsentence"
+    className: "org.apache.storm.flux.wrappers.bolts.FluxShellBolt"
+    constructorArgs:
+      # command line
+      - ["python", "splitsentence.py"]
+      # output fields
+      - ["word"]
+    parallelism: 1
+    # ...
+
+  - id: "log"
+    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
+    parallelism: 1
+    # ...
+
+  - id: "count"
+    className: "org.apache.storm.testing.TestWordCounter"
+    parallelism: 1
+    # ...
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+# custom stream groupings are also supported
+
+streams:
+  - name: "spout --> split" # name isn't used (placeholder for logging, UI, etc.)
+    from: "sentence-spout"
+    to: "splitsentence"
+    grouping:
+      type: SHUFFLE
+
+  - name: "split --> count"
+    from: "splitsentence"
+    to: "count"
+    grouping:
+      type: FIELDS
+      args: ["word"]
+
+  - name: "count --> log"
+    from: "count"
+    to: "log"
+    grouping:
+      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/simple_hbase.yaml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/simple_hbase.yaml b/examples/flux-examples/src/main/resources/simple_hbase.yaml
new file mode 100644
index 0000000..93a2781
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/simple_hbase.yaml
@@ -0,0 +1,92 @@
+# 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.
+---
+# NOTE: To use this example, you will need to modify `src/main/resources/hbase-site.xml`
+# to point to your HBase instance, and then repackage with `mvn package`.
+# This is a known issue.
+
+# topology definition
+# name to be used when submitting
+name: "hbase-persistent-wordcount"
+
+# Components
+components:
+  - id: "columnFields"
+    className: "org.apache.storm.tuple.Fields"
+    constructorArgs:
+      - ["word"]
+
+  - id: "counterFields"
+    className: "org.apache.storm.tuple.Fields"
+    constructorArgs:
+      - ["count"]
+
+  - id: "mapper"
+    className: "org.apache.storm.hbase.bolt.mapper.SimpleHBaseMapper"
+    configMethods:
+      - name: "withRowKeyField"
+        args: ["word"]
+      - name: "withColumnFields"
+        args: [ref: "columnFields"]
+      - name: "withCounterFields"
+        args: [ref: "counterFields"]
+      - name: "withColumnFamily"
+        args: ["cf"]
+
+# topology configuration
+# this will be passed to the submitter as a map of config options
+config:
+  topology.workers: 1
+  hbase.conf:
+    hbase.rootdir: "${hbase.rootdir}"
+    hbase.zookeeper.quorum: "${hbase.zookeeper.quorum}"
+
+# spout definitions
+spouts:
+  - id: "word-spout"
+    className: "org.apache.storm.testing.TestWordSpout"
+    parallelism: 1
+
+# bolt definitions
+
+bolts:
+  - id: "count-bolt"
+    className: "org.apache.storm.flux.examples.WordCounter"
+    parallelism: 1
+
+  - id: "hbase-bolt"
+    className: "org.apache.storm.hbase.bolt.HBaseBolt"
+    constructorArgs:
+      - "WordCount" # HBase table name
+      - ref: "mapper"
+    configMethods:
+      - name: "withConfigKey"
+        args: ["hbase.conf"]
+    parallelism: 1
+
+streams:
+  - name: "" # name isn't used (placeholder for logging, UI, etc.)
+    from: "word-spout"
+    to: "count-bolt"
+    grouping:
+      type: SHUFFLE
+
+  - name: "" # name isn't used (placeholder for logging, UI, etc.)
+    from: "count-bolt"
+    to: "hbase-bolt"
+    grouping:
+      type: FIELDS
+      args: ["word"]

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/simple_hdfs.yaml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/simple_hdfs.yaml b/examples/flux-examples/src/main/resources/simple_hdfs.yaml
new file mode 100644
index 0000000..b8d4020
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/simple_hdfs.yaml
@@ -0,0 +1,105 @@
+# 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.
+
+# Test ability to wire together shell spouts/bolts
+---
+
+# topology definition
+# name to be used when submitting
+name: "hdfs-topology"
+
+# Components
+# Components are analagous to Spring beans. They are meant to be used as constructor,
+# property(setter), and builder arguments.
+#
+# for the time being, components must be declared in the order they are referenced
+components:
+  - id: "syncPolicy"
+    className: "org.apache.storm.hdfs.bolt.sync.CountSyncPolicy"
+    constructorArgs:
+      - 1000
+  - id: "rotationPolicy"
+    className: "org.apache.storm.hdfs.bolt.rotation.TimedRotationPolicy"
+    constructorArgs:
+      - 30
+      - SECONDS
+
+  - id: "fileNameFormat"
+    className: "org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat"
+    configMethods:
+      - name: "withPath"
+        args: ["${hdfs.write.dir}"]
+      - name: "withExtension"
+        args: [".txt"]
+
+  - id: "recordFormat"
+    className: "org.apache.storm.hdfs.bolt.format.DelimitedRecordFormat"
+    configMethods:
+      - name: "withFieldDelimiter"
+        args: ["|"]
+
+  - id: "rotationAction"
+    className: "org.apache.storm.hdfs.common.rotation.MoveFileAction"
+    configMethods:
+      - name: "toDestination"
+        args: ["${hdfs.dest.dir}"]
+
+# spout definitions
+spouts:
+  - id: "spout-1"
+    className: "org.apache.storm.testing.TestWordSpout"
+    parallelism: 1
+    # ...
+
+# bolt definitions
+
+bolts:
+  - id: "bolt-1"
+    className: "org.apache.storm.hdfs.bolt.HdfsBolt"
+    configMethods:
+      - name: "withConfigKey"
+        args: ["hdfs.config"]
+      - name: "withFsUrl"
+        args: ["${hdfs.url}"]
+      - name: "withFileNameFormat"
+        args: [ref: "fileNameFormat"]
+      - name: "withRecordFormat"
+        args: [ref: "recordFormat"]
+      - name: "withRotationPolicy"
+        args: [ref: "rotationPolicy"]
+      - name: "withSyncPolicy"
+        args: [ref: "syncPolicy"]
+      - name: "addRotationAction"
+        args: [ref: "rotationAction"]
+    parallelism: 1
+    # ...
+
+  - id: "bolt-2"
+    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
+    parallelism: 1
+
+streams:
+  - name: "" # name isn't used (placeholder for logging, UI, etc.)
+    from: "spout-1"
+    to: "bolt-1"
+    grouping:
+      type: SHUFFLE
+
+  - name: "" # name isn't used (placeholder for logging, UI, etc.)
+    from: "spout-1"
+    to: "bolt-2"
+    grouping:
+      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/simple_stateful_wordcount.yaml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/simple_stateful_wordcount.yaml b/examples/flux-examples/src/main/resources/simple_stateful_wordcount.yaml
new file mode 100644
index 0000000..14b9b3a
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/simple_stateful_wordcount.yaml
@@ -0,0 +1,60 @@
+# 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.
+
+---
+
+# topology definition
+# name to be used when submitting
+name: "stateful-wordcount-topology"
+
+# topology configuration
+# this will be passed to the submitter as a map of config options
+#
+config:
+  topology.workers: 1
+
+# spout definitions
+spouts:
+  - id: "spout-1"
+    className: "org.apache.storm.testing.TestWordSpout"
+    parallelism: 1
+
+# bolt definitions
+bolts:
+  - id: "bolt-1"
+    className: "org.apache.storm.flux.examples.StatefulWordCounter"
+    parallelism: 1
+
+  - id: "bolt-2"
+    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
+    parallelism: 1
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+streams:
+  - name: "spout-1 --> bolt-1" # name isn't used (placeholder for logging, UI, etc.)
+    from: "spout-1"
+    to: "bolt-1"
+    grouping:
+      type: FIELDS
+      args: ["word"]
+
+  - name: "bolt-1 --> bolt2"
+    from: "bolt-1"
+    to: "bolt-2"
+    grouping:
+      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/simple_windowing.yaml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/simple_windowing.yaml b/examples/flux-examples/src/main/resources/simple_windowing.yaml
new file mode 100755
index 0000000..f2f74ff
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/simple_windowing.yaml
@@ -0,0 +1,69 @@
+# 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.
+
+---
+
+name: "sliding-window-topology"
+
+components:
+  - id: "windowLength"
+    className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
+    constructorArgs:
+      - 5
+  - id: "slidingInterval"
+    className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
+    constructorArgs:
+      - 3
+
+config:
+  topology.workers: 1
+
+# spout definitions
+spouts:
+  - id: "spout-1"
+    className: "org.apache.storm.testing.TestWordSpout"
+    parallelism: 1
+
+# bolt definitions
+bolts:
+  - id: "bolt-1"
+    className: "org.apache.storm.flux.examples.TestWindowBolt"
+    configMethods:
+      - name: "withWindow"
+        args: [ref: "windowLength", ref: "slidingInterval"]
+    parallelism: 1
+  - id: "bolt-2"
+    className: "org.apache.storm.flux.examples.TestPrintBolt"
+    parallelism: 1
+
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+streams:
+  - name: "spout-1 --> bolt-1" # name isn't used (placeholder for logging, UI, etc.)
+#    id: "connection-1"
+    from: "spout-1"
+    to: "bolt-1"
+    grouping:
+      type: FIELDS
+      args: ["word"]
+  - name: "bolt-1 --> bolt-2" # name isn't used (placeholder for logging, UI, etc.)
+#    id: "connection-1"
+    from: "bolt-1"
+    to: "bolt-2"
+    grouping:
+      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/flux-examples/src/main/resources/simple_wordcount.yaml
----------------------------------------------------------------------
diff --git a/examples/flux-examples/src/main/resources/simple_wordcount.yaml b/examples/flux-examples/src/main/resources/simple_wordcount.yaml
new file mode 100644
index 0000000..6443a97
--- /dev/null
+++ b/examples/flux-examples/src/main/resources/simple_wordcount.yaml
@@ -0,0 +1,68 @@
+# 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.
+
+---
+
+# topology definition
+# name to be used when submitting
+name: "yaml-topology"
+
+# topology configuration
+# this will be passed to the submitter as a map of config options
+#
+config:
+  topology.workers: 1
+
+# spout definitions
+spouts:
+  - id: "spout-1"
+    className: "org.apache.storm.testing.TestWordSpout"
+    parallelism: 1
+
+# bolt definitions
+bolts:
+  - id: "bolt-1"
+    className: "org.apache.storm.testing.TestWordCounter"
+    parallelism: 1
+
+  - id: "bolt-2"
+    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
+    parallelism: 1
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+streams:
+  - name: "spout-1 --> bolt-1" # name isn't used (placeholder for logging, UI, etc.)
+#    id: "connection-1"
+    from: "spout-1"
+    to: "bolt-1"
+    grouping:
+      type: FIELDS
+      args: ["word"]
+
+  - name: "bolt-1 --> bolt2"
+    from: "bolt-1"
+    to: "bolt-2"
+    grouping:
+      type: SHUFFLE
+
+
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-elasticsearch-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-elasticsearch-examples/pom.xml b/examples/storm-elasticsearch-examples/pom.xml
index 0c312fc..f853ec4 100644
--- a/examples/storm-elasticsearch-examples/pom.xml
+++ b/examples/storm-elasticsearch-examples/pom.xml
@@ -26,21 +26,6 @@
     </parent>
 
     <artifactId>storm-elasticsearch-examples</artifactId>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-hbase-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-hbase-examples/pom.xml b/examples/storm-hbase-examples/pom.xml
index 1b26e92..8b1c15c 100644
--- a/examples/storm-hbase-examples/pom.xml
+++ b/examples/storm-hbase-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-hbase-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-hdfs-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-hdfs-examples/pom.xml b/examples/storm-hdfs-examples/pom.xml
index 78ac00a..69b90ef 100644
--- a/examples/storm-hdfs-examples/pom.xml
+++ b/examples/storm-hdfs-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-hdfs-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-hive-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-hive-examples/pom.xml b/examples/storm-hive-examples/pom.xml
index a51f597..6f3f6ba 100644
--- a/examples/storm-hive-examples/pom.xml
+++ b/examples/storm-hive-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-hive-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jdbc-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-jdbc-examples/pom.xml b/examples/storm-jdbc-examples/pom.xml
index fa2cae9..9d488b2 100644
--- a/examples/storm-jdbc-examples/pom.xml
+++ b/examples/storm-jdbc-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-jdbc-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/README.markdown
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/README.markdown b/examples/storm-jms-examples/README.markdown
new file mode 100644
index 0000000..7a4d8f0
--- /dev/null
+++ b/examples/storm-jms-examples/README.markdown
@@ -0,0 +1,12 @@
+## About Storm JMS Examples
+This project contains a simple storm topology that illustrates the usage of "storm-jms".
+
+To build:
+
+`mvn clean install`
+
+The default build will create a jar file that can be deployed to to a Storm cluster in the "target" directory:
+
+`storm-jms-examples-0.1-SNAPSHOT-jar-with-dependencies.jar`
+
+

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/pom.xml b/examples/storm-jms-examples/pom.xml
new file mode 100644
index 0000000..4d232f7
--- /dev/null
+++ b/examples/storm-jms-examples/pom.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>storm</artifactId>
+        <groupId>org.apache.storm</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+
+    <artifactId>storm-jms-examples</artifactId>
+
+    <properties>
+        <spring.version>2.5.6</spring.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>${spring.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>${spring.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>${spring.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jms</artifactId>
+            <version>${spring.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xbean</groupId>
+            <artifactId>xbean-spring</artifactId>
+            <version>3.7</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-core</artifactId>
+            <version>${project.version}</version>
+            <!-- keep storm out of the jar-with-dependencies -->
+            <scope>${provided.scope}</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-jms</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>activemq-core</artifactId>
+            <version>5.4.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <!-- bind the maven-assembly-plugin to the package phase this will create
+                a jar file without the storm dependencies suitable for deployment to a cluster. -->
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <archive>
+                        <manifest>
+                        </manifest>
+                    </archive>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <executable>java</executable>
+                    <includeProjectDependencies>true</includeProjectDependencies>
+                    <includePluginDependencies>true</includePluginDependencies>
+                    <mainClass>org.apache.storm.jms.example.ExampleJmsTopology</mainClass>
+                    <systemProperties>
+                        <systemProperty>
+                            <key>log4j.configuration</key>
+                            <value>file:./src/main/resources/log4j.properties</value>
+                        </systemProperty>
+                    </systemProperties>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.storm</groupId>
+                        <artifactId>storm-core</artifactId>
+                        <version>${project.version}</version>
+                        <type>jar</type>
+                    </dependency>
+                </dependencies>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java
new file mode 100644
index 0000000..82dbd5b
--- /dev/null
+++ b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java
@@ -0,0 +1,131 @@
+/*
+ * 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 org.apache.storm.jms.example;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import org.apache.storm.Config;
+import org.apache.storm.LocalCluster;
+import org.apache.storm.LocalCluster.LocalTopology;
+import org.apache.storm.StormSubmitter;
+import org.apache.storm.jms.JmsMessageProducer;
+import org.apache.storm.jms.JmsProvider;
+import org.apache.storm.jms.JmsTupleProducer;
+import org.apache.storm.jms.bolt.JmsBolt;
+import org.apache.storm.jms.spout.JmsSpout;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.ITuple;
+import org.apache.storm.utils.Utils;
+
+public class ExampleJmsTopology {
+    public static final String JMS_QUEUE_SPOUT = "JMS_QUEUE_SPOUT";
+    public static final String INTERMEDIATE_BOLT = "INTERMEDIATE_BOLT";
+    public static final String FINAL_BOLT = "FINAL_BOLT";
+    public static final String JMS_TOPIC_BOLT = "JMS_TOPIC_BOLT";
+    public static final String JMS_TOPIC_SPOUT = "JMS_TOPIC_SPOUT";
+    public static final String ANOTHER_BOLT = "ANOTHER_BOLT";
+
+    @SuppressWarnings("serial")
+    public static void main(String[] args) throws Exception {
+
+        // JMS Queue Provider
+        JmsProvider jmsQueueProvider = new SpringJmsProvider(
+                "jms-activemq.xml", "jmsConnectionFactory",
+                "notificationQueue");
+
+        // JMS Topic provider
+        JmsProvider jmsTopicProvider = new SpringJmsProvider(
+                "jms-activemq.xml", "jmsConnectionFactory",
+                "notificationTopic");
+
+        // JMS Producer
+        JmsTupleProducer producer = new JsonTupleProducer();
+
+        // JMS Queue Spout
+        JmsSpout queueSpout = new JmsSpout();
+        queueSpout.setJmsProvider(jmsQueueProvider);
+        queueSpout.setJmsTupleProducer(producer);
+        queueSpout.setJmsAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
+        queueSpout.setDistributed(true); // allow multiple instances
+
+        TopologyBuilder builder = new TopologyBuilder();
+
+        // spout with 5 parallel instances
+        builder.setSpout(JMS_QUEUE_SPOUT, queueSpout, 5);
+
+        // intermediate bolt, subscribes to jms spout, anchors on tuples, and auto-acks
+        builder.setBolt(INTERMEDIATE_BOLT,
+                new GenericBolt("INTERMEDIATE_BOLT", true, true, new Fields("json")), 3).shuffleGrouping(
+                JMS_QUEUE_SPOUT);
+
+        // bolt that subscribes to the intermediate bolt, and auto-acks
+        // messages.
+        builder.setBolt(FINAL_BOLT, new GenericBolt("FINAL_BOLT", true, true), 3).shuffleGrouping(
+                INTERMEDIATE_BOLT);
+
+        // bolt that subscribes to the intermediate bolt, and publishes to a JMS Topic
+        JmsBolt jmsBolt = new JmsBolt();
+        jmsBolt.setJmsProvider(jmsTopicProvider);
+
+        // anonymous message producer just calls toString() on the tuple to create a jms message
+        jmsBolt.setJmsMessageProducer(new JmsMessageProducer() {
+            @Override
+            public Message toMessage(Session session, ITuple input) throws JMSException {
+                System.out.println("Sending JMS Message:" + input.toString());
+                TextMessage tm = session.createTextMessage(input.toString());
+                return tm;
+            }
+        });
+
+        builder.setBolt(JMS_TOPIC_BOLT, jmsBolt).shuffleGrouping(INTERMEDIATE_BOLT);
+
+        // JMS Topic spout
+        JmsSpout topicSpout = new JmsSpout();
+        topicSpout.setJmsProvider(jmsTopicProvider);
+        topicSpout.setJmsTupleProducer(producer);
+        topicSpout.setJmsAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
+        topicSpout.setDistributed(false);
+
+        builder.setSpout(JMS_TOPIC_SPOUT, topicSpout);
+
+        builder.setBolt(ANOTHER_BOLT, new GenericBolt("ANOTHER_BOLT", true, true), 1).shuffleGrouping(
+                JMS_TOPIC_SPOUT);
+
+        Config conf = new Config();
+
+        if (args.length > 0) {
+            conf.setNumWorkers(3);
+
+            StormSubmitter.submitTopology(args[0], conf,
+                    builder.createTopology());
+        } else {
+
+            conf.setDebug(true);
+
+            try (LocalCluster cluster = new LocalCluster();
+                 LocalTopology topo = cluster.submitTopology("storm-jms-example", conf, builder.createTopology());) {
+                Utils.sleep(60000);
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java
new file mode 100644
index 0000000..57de1ba
--- /dev/null
+++ b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java
@@ -0,0 +1,116 @@
+/*
+ * 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 org.apache.storm.jms.example;
+
+import java.util.Map;
+
+import org.apache.storm.topology.base.BaseRichBolt;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+
+/**
+ * A generic <code>org.apache.storm.topology.IRichBolt</code> implementation
+ * for testing/debugging the Storm JMS Spout and example topologies.
+ * <p>
+ * For debugging purposes, set the log level of the
+ * <code>org.apache.storm.contrib.jms</code> package to DEBUG for debugging
+ * output.
+ *
+ * @author tgoetz
+ */
+@SuppressWarnings("serial")
+public class GenericBolt extends BaseRichBolt {
+    private static final Logger LOG = LoggerFactory.getLogger(GenericBolt.class);
+    private OutputCollector collector;
+    private boolean autoAck = false;
+    private boolean autoAnchor = false;
+    private Fields declaredFields;
+    private String name;
+
+    /**
+     * Constructs a new <code>GenericBolt</code> instance.
+     *
+     * @param name           The name of the bolt (used in DEBUG logging)
+     * @param autoAck        Whether or not this bolt should automatically acknowledge received tuples.
+     * @param autoAnchor     Whether or not this bolt should automatically anchor to received tuples.
+     * @param declaredFields The fields this bolt declares as output.
+     */
+    public GenericBolt(String name, boolean autoAck, boolean autoAnchor, Fields declaredFields) {
+        this.name = name;
+        this.autoAck = autoAck;
+        this.autoAnchor = autoAnchor;
+        this.declaredFields = declaredFields;
+    }
+
+    public GenericBolt(String name, boolean autoAck, boolean autoAnchor) {
+        this(name, autoAck, autoAnchor, null);
+    }
+
+    @SuppressWarnings("rawtypes")
+    public void prepare(Map stormConf, TopologyContext context,
+                        OutputCollector collector) {
+        this.collector = collector;
+
+    }
+
+    public void execute(Tuple input) {
+        LOG.debug("[" + this.name + "] Received message: " + input);
+
+
+        // only emit if we have declared fields.
+        if (this.declaredFields != null) {
+            LOG.debug("[" + this.name + "] emitting: " + input);
+            if (this.autoAnchor) {
+                this.collector.emit(input, input.getValues());
+            } else {
+                this.collector.emit(input.getValues());
+            }
+        }
+
+        if (this.autoAck) {
+            LOG.debug("[" + this.name + "] ACKing tuple: " + input);
+            this.collector.ack(input);
+        }
+
+    }
+
+    public void cleanup() {
+
+    }
+
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        if (this.declaredFields != null) {
+            declarer.declare(this.declaredFields);
+        }
+    }
+
+    public boolean isAutoAck() {
+        return this.autoAck;
+    }
+
+    public void setAutoAck(boolean autoAck) {
+        this.autoAck = autoAck;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java
new file mode 100644
index 0000000..9ee175e
--- /dev/null
+++ b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java
@@ -0,0 +1,58 @@
+/*
+ * 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 org.apache.storm.jms.example;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.TextMessage;
+
+import org.apache.storm.jms.JmsTupleProducer;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+
+/**
+ * A simple <code>JmsTupleProducer</code> that expects to receive
+ * JMS <code>TextMessage</code> objects with a body in JSON format.
+ * <p/>
+ * Ouputs a tuple with field name "json" and a string value
+ * containing the raw json.
+ * <p/>
+ * <b>NOTE: </b> Currently this implementation assumes the text is valid
+ * JSON and does not attempt to parse or validate it.
+ * 
+ * @author tgoetz
+ *
+ */
+@SuppressWarnings("serial")
+public class JsonTupleProducer implements JmsTupleProducer {
+
+	public Values toTuple(Message msg) throws JMSException {
+		if(msg instanceof TextMessage){
+			String json = ((TextMessage) msg).getText();
+			return new Values(json);
+		} else {
+			return null;
+		}
+	}
+
+	public void declareOutputFields(OutputFieldsDeclarer declarer) {
+		declarer.declare(new Fields("json"));
+	}
+
+}


[13/14] storm git commit: Merge branch 'STORM-2416' of https://github.com/HeartSaVioR/storm into STORM-2416-merge

Posted by ka...@apache.org.
Merge branch 'STORM-2416' of https://github.com/HeartSaVioR/storm into STORM-2416-merge


Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/7dfd1100
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/7dfd1100
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/7dfd1100

Branch: refs/heads/master
Commit: 7dfd1100d63212a2e46902f818bbe6a0ef7c7a8e
Parents: c4170ab 2a369e4
Author: Jungtaek Lim <ka...@gmail.com>
Authored: Thu Apr 6 07:27:28 2017 +0900
Committer: Jungtaek Lim <ka...@gmail.com>
Committed: Thu Apr 6 07:27:28 2017 +0900

----------------------------------------------------------------------
 examples/flux-examples/README.md                |    93 +
 examples/flux-examples/pom.xml                  |   152 +
 .../flux/examples/StatefulWordCounter.java      |    64 +
 .../storm/flux/examples/TestPrintBolt.java      |    39 +
 .../storm/flux/examples/TestWindowBolt.java     |    47 +
 .../storm/flux/examples/WordCountClient.java    |    74 +
 .../apache/storm/flux/examples/WordCounter.java |    71 +
 .../src/main/resources/hbase_bolt.properties    |    18 +
 .../src/main/resources/hdfs_bolt.properties     |    26 +
 .../src/main/resources/kafka_spout.yaml         |   136 +
 .../src/main/resources/multilang.yaml           |    89 +
 .../src/main/resources/simple_hbase.yaml        |    92 +
 .../src/main/resources/simple_hdfs.yaml         |   105 +
 .../resources/simple_stateful_wordcount.yaml    |    60 +
 .../src/main/resources/simple_windowing.yaml    |    69 +
 .../src/main/resources/simple_wordcount.yaml    |    68 +
 examples/storm-elasticsearch-examples/pom.xml   |    15 -
 examples/storm-hbase-examples/pom.xml           |    14 -
 examples/storm-hdfs-examples/pom.xml            |    14 -
 examples/storm-hive-examples/pom.xml            |    14 -
 examples/storm-jdbc-examples/pom.xml            |    14 -
 examples/storm-jms-examples/README.markdown     |    12 +
 examples/storm-jms-examples/pom.xml             |   150 +
 .../storm/jms/example/ExampleJmsTopology.java   |   131 +
 .../apache/storm/jms/example/GenericBolt.java   |   116 +
 .../storm/jms/example/JsonTupleProducer.java    |    58 +
 .../storm/jms/example/SpringJmsProvider.java    |    74 +
 .../src/main/resources/jms-activemq.xml         |    53 +
 .../src/main/resources/log4j.properties         |    29 +
 examples/storm-kafka-client-examples/pom.xml    |    14 -
 examples/storm-kafka-examples/pom.xml           |    14 -
 examples/storm-mongodb-examples/pom.xml         |    14 -
 examples/storm-mqtt-examples/pom.xml            |    14 -
 examples/storm-opentsdb-examples/pom.xml        |    14 -
 examples/storm-perf/README.markdown             |    50 +
 examples/storm-perf/pom.xml                     |   107 +
 .../main/conf/ConstSpoutIdBoltNullBoltTopo.yaml |    22 +
 .../src/main/conf/ConstSpoutNullBoltTopo.yaml   |    22 +
 .../src/main/conf/FileReadWordCountTopo.yaml    |    23 +
 .../src/main/conf/HdfsSpoutNullBoltTopo.yaml    |    25 +
 .../storm-perf/src/main/conf/KafkaHdfsTopo.yaml |    26 +
 .../src/main/conf/KafkaSpoutNullBoltTopo.yaml   |    23 +
 .../src/main/conf/StrGenSpoutHdfsBoltTopo.yaml  |    25 +
 .../perf/ConstSpoutIdBoltNullBoltTopo.java      |   101 +
 .../storm/perf/ConstSpoutNullBoltTopo.java      |   107 +
 .../apache/storm/perf/ConstSpoutOnlyTopo.java   |    74 +
 .../storm/perf/FileReadWordCountTopo.java       |    96 +
 .../storm/perf/HdfsSpoutNullBoltTopo.java       |   101 +
 .../org/apache/storm/perf/KafkaHdfsTopo.java    |   168 +
 .../storm/perf/KafkaSpoutNullBoltTopo.java      |   114 +
 .../storm/perf/StrGenSpoutHdfsBoltTopo.java     |   154 +
 .../org/apache/storm/perf/bolt/CountBolt.java   |    58 +
 .../org/apache/storm/perf/bolt/DevNullBolt.java |    47 +
 .../java/org/apache/storm/perf/bolt/IdBolt.java |    49 +
 .../storm/perf/bolt/SplitSentenceBolt.java      |    58 +
 .../org/apache/storm/perf/spout/ConstSpout.java |    70 +
 .../apache/storm/perf/spout/FileReadSpout.java  |   141 +
 .../apache/storm/perf/spout/StringGenSpout.java |    93 +
 .../storm/perf/utils/BasicMetricsCollector.java |   309 +
 .../org/apache/storm/perf/utils/Helper.java     |   131 +
 .../apache/storm/perf/utils/IdentityBolt.java   |    51 +
 .../apache/storm/perf/utils/MetricsSample.java  |   248 +
 .../src/main/sampledata/randomwords.txt         | 14049 +++++++++++++++++
 examples/storm-pmml-examples/pom.xml            |    14 -
 examples/storm-redis-examples/pom.xml           |    14 -
 examples/storm-solr-examples/pom.xml            |    14 -
 examples/storm-starter/pom.xml                  |    11 -
 external/flux/flux-examples/README.md           |    93 -
 external/flux/flux-examples/pom.xml             |   146 -
 .../flux/examples/StatefulWordCounter.java      |    64 -
 .../storm/flux/examples/TestPrintBolt.java      |    39 -
 .../storm/flux/examples/TestWindowBolt.java     |    47 -
 .../storm/flux/examples/WordCountClient.java    |    74 -
 .../apache/storm/flux/examples/WordCounter.java |    71 -
 .../src/main/resources/hbase_bolt.properties    |    18 -
 .../src/main/resources/hdfs_bolt.properties     |    26 -
 .../src/main/resources/kafka_spout.yaml         |   136 -
 .../src/main/resources/multilang.yaml           |    89 -
 .../src/main/resources/simple_hbase.yaml        |    92 -
 .../src/main/resources/simple_hdfs.yaml         |   105 -
 .../resources/simple_stateful_wordcount.yaml    |    60 -
 .../src/main/resources/simple_windowing.yaml    |    69 -
 .../src/main/resources/simple_wordcount.yaml    |    68 -
 external/flux/pom.xml                           |    21 -
 external/sql/storm-sql-core/pom.xml             |     4 +-
 .../storm-sql-external/storm-sql-hdfs/pom.xml   |     6 +-
 .../storm-sql-external/storm-sql-kafka/pom.xml  |     6 +-
 .../storm-sql-mongodb/pom.xml                   |     6 +-
 .../storm-sql-external/storm-sql-redis/pom.xml  |     6 +-
 external/sql/storm-sql-runtime/pom.xml          |     2 +-
 external/storm-cassandra/pom.xml                |     2 +-
 external/storm-druid/pom.xml                    |    42 +-
 external/storm-elasticsearch/pom.xml            |     2 +-
 external/storm-eventhubs/pom.xml                |    86 +-
 external/storm-hbase/pom.xml                    |     2 +-
 external/storm-hdfs/pom.xml                     |     2 +-
 external/storm-hive/pom.xml                     |     2 +-
 external/storm-jdbc/pom.xml                     |     2 +-
 external/storm-jms/core/pom.xml                 |    95 -
 .../apache/storm/jms/JmsMessageProducer.java    |    46 -
 .../java/org/apache/storm/jms/JmsProvider.java  |    48 -
 .../org/apache/storm/jms/JmsTupleProducer.java  |    58 -
 .../java/org/apache/storm/jms/bolt/JmsBolt.java |   219 -
 .../apache/storm/jms/spout/JmsMessageID.java    |    58 -
 .../org/apache/storm/jms/spout/JmsSpout.java    |   382 -
 .../org/apache/storm/jms/trident/JmsBatch.java  |    27 -
 .../org/apache/storm/jms/trident/JmsState.java  |   129 -
 .../storm/jms/trident/JmsStateFactory.java      |    40 -
 .../apache/storm/jms/trident/JmsUpdater.java    |    38 -
 .../storm/jms/trident/TridentJmsSpout.java      |   409 -
 .../apache/storm/jms/spout/JmsSpoutTest.java    |    88 -
 .../apache/storm/jms/spout/MockJmsProvider.java |    62 -
 .../jms/spout/MockSpoutOutputCollector.java     |    55 -
 .../storm/jms/spout/MockTupleProducer.java      |    47 -
 .../core/src/test/resources/jndi.properties     |    18 -
 external/storm-jms/examples/README.markdown     |    12 -
 external/storm-jms/examples/pom.xml             |   150 -
 .../storm/jms/example/ExampleJmsTopology.java   |   131 -
 .../apache/storm/jms/example/GenericBolt.java   |   116 -
 .../storm/jms/example/JsonTupleProducer.java    |    58 -
 .../storm/jms/example/SpringJmsProvider.java    |    74 -
 .../src/main/resources/jms-activemq.xml         |    53 -
 .../src/main/resources/log4j.properties         |    29 -
 external/storm-jms/pom.xml                      |    48 +-
 .../apache/storm/jms/JmsMessageProducer.java    |    46 +
 .../java/org/apache/storm/jms/JmsProvider.java  |    48 +
 .../org/apache/storm/jms/JmsTupleProducer.java  |    58 +
 .../java/org/apache/storm/jms/bolt/JmsBolt.java |   219 +
 .../apache/storm/jms/spout/JmsMessageID.java    |    58 +
 .../org/apache/storm/jms/spout/JmsSpout.java    |   382 +
 .../org/apache/storm/jms/trident/JmsBatch.java  |    27 +
 .../org/apache/storm/jms/trident/JmsState.java  |   129 +
 .../storm/jms/trident/JmsStateFactory.java      |    40 +
 .../apache/storm/jms/trident/JmsUpdater.java    |    38 +
 .../storm/jms/trident/TridentJmsSpout.java      |   409 +
 .../apache/storm/jms/spout/JmsSpoutTest.java    |    88 +
 .../apache/storm/jms/spout/MockJmsProvider.java |    62 +
 .../jms/spout/MockSpoutOutputCollector.java     |    55 +
 .../storm/jms/spout/MockTupleProducer.java      |    47 +
 .../src/test/resources/jndi.properties          |    18 +
 external/storm-kafka-client/pom.xml             |     2 +-
 external/storm-kafka/pom.xml                    |     2 +-
 external/storm-kinesis/pom.xml                  |     2 +-
 external/storm-metrics/pom.xml                  |     2 +-
 external/storm-mongodb/pom.xml                  |   148 +-
 external/storm-mqtt/core/pom.xml                |   126 -
 .../java/org/apache/storm/mqtt/MqttLogger.java  |    36 -
 .../java/org/apache/storm/mqtt/MqttMessage.java |    41 -
 .../apache/storm/mqtt/MqttMessageMapper.java    |    44 -
 .../org/apache/storm/mqtt/MqttTupleMapper.java  |    37 -
 .../org/apache/storm/mqtt/bolt/MqttBolt.java    |   105 -
 .../apache/storm/mqtt/common/MqttOptions.java   |   334 -
 .../apache/storm/mqtt/common/MqttPublisher.java |    67 -
 .../org/apache/storm/mqtt/common/MqttUtils.java |    88 -
 .../org/apache/storm/mqtt/common/SslUtils.java  |    64 -
 .../mqtt/mappers/ByteArrayMessageMapper.java    |    34 -
 .../storm/mqtt/mappers/StringMessageMapper.java |    37 -
 .../apache/storm/mqtt/spout/AckableMessage.java |    71 -
 .../org/apache/storm/mqtt/spout/MqttSpout.java  |   262 -
 .../storm/mqtt/ssl/DefaultKeyStoreLoader.java   |    97 -
 .../apache/storm/mqtt/ssl/KeyStoreLoader.java   |    35 -
 .../storm/mqtt/trident/MqttPublishFunction.java |    85 -
 .../storm/mqtt/StormMqttIntegrationTest.java    |   153 -
 external/storm-mqtt/pom.xml                     |   144 +-
 .../java/org/apache/storm/mqtt/MqttLogger.java  |    36 +
 .../java/org/apache/storm/mqtt/MqttMessage.java |    41 +
 .../apache/storm/mqtt/MqttMessageMapper.java    |    44 +
 .../org/apache/storm/mqtt/MqttTupleMapper.java  |    37 +
 .../org/apache/storm/mqtt/bolt/MqttBolt.java    |   105 +
 .../apache/storm/mqtt/common/MqttOptions.java   |   334 +
 .../apache/storm/mqtt/common/MqttPublisher.java |    67 +
 .../org/apache/storm/mqtt/common/MqttUtils.java |    88 +
 .../org/apache/storm/mqtt/common/SslUtils.java  |    64 +
 .../mqtt/mappers/ByteArrayMessageMapper.java    |    34 +
 .../storm/mqtt/mappers/StringMessageMapper.java |    37 +
 .../apache/storm/mqtt/spout/AckableMessage.java |    71 +
 .../org/apache/storm/mqtt/spout/MqttSpout.java  |   262 +
 .../storm/mqtt/ssl/DefaultKeyStoreLoader.java   |    97 +
 .../apache/storm/mqtt/ssl/KeyStoreLoader.java   |    35 +
 .../storm/mqtt/trident/MqttPublishFunction.java |    85 +
 .../storm/mqtt/StormMqttIntegrationTest.java    |   153 +
 external/storm-opentsdb/pom.xml                 |     2 +-
 external/storm-pmml/pom.xml                     |     2 +-
 external/storm-redis/pom.xml                    |     2 +-
 external/storm-solr/pom.xml                     |     2 +-
 pom.xml                                         |    18 +-
 .../final-package/src/main/assembly/binary.xml  |   254 +-
 storm-perf/README.markdown                      |    50 -
 storm-perf/pom.xml                              |   122 -
 .../main/conf/ConstSpoutIdBoltNullBoltTopo.yaml |    22 -
 .../src/main/conf/ConstSpoutNullBoltTopo.yaml   |    22 -
 .../src/main/conf/FileReadWordCountTopo.yaml    |    23 -
 .../src/main/conf/HdfsSpoutNullBoltTopo.yaml    |    25 -
 storm-perf/src/main/conf/KafkaHdfsTopo.yaml     |    26 -
 .../src/main/conf/KafkaSpoutNullBoltTopo.yaml   |    23 -
 .../src/main/conf/StrGenSpoutHdfsBoltTopo.yaml  |    25 -
 .../perf/ConstSpoutIdBoltNullBoltTopo.java      |   101 -
 .../storm/perf/ConstSpoutNullBoltTopo.java      |   107 -
 .../apache/storm/perf/ConstSpoutOnlyTopo.java   |    74 -
 .../storm/perf/FileReadWordCountTopo.java       |    96 -
 .../storm/perf/HdfsSpoutNullBoltTopo.java       |   101 -
 .../org/apache/storm/perf/KafkaHdfsTopo.java    |   168 -
 .../storm/perf/KafkaSpoutNullBoltTopo.java      |   114 -
 .../storm/perf/StrGenSpoutHdfsBoltTopo.java     |   154 -
 .../org/apache/storm/perf/bolt/CountBolt.java   |    58 -
 .../org/apache/storm/perf/bolt/DevNullBolt.java |    47 -
 .../java/org/apache/storm/perf/bolt/IdBolt.java |    49 -
 .../storm/perf/bolt/SplitSentenceBolt.java      |    58 -
 .../org/apache/storm/perf/spout/ConstSpout.java |    70 -
 .../apache/storm/perf/spout/FileReadSpout.java  |   141 -
 .../apache/storm/perf/spout/StringGenSpout.java |    93 -
 .../storm/perf/utils/BasicMetricsCollector.java |   309 -
 .../org/apache/storm/perf/utils/Helper.java     |   131 -
 .../apache/storm/perf/utils/IdentityBolt.java   |    51 -
 .../apache/storm/perf/utils/MetricsSample.java  |   248 -
 storm-perf/src/main/sampledata/randomwords.txt  | 14049 -----------------
 216 files changed, 21999 insertions(+), 22608 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/storm/blob/7dfd1100/external/storm-cassandra/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/storm/blob/7dfd1100/pom.xml
----------------------------------------------------------------------


[08/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-pmml-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-pmml-examples/pom.xml b/examples/storm-pmml-examples/pom.xml
index e0925fd..05ec99f 100644
--- a/examples/storm-pmml-examples/pom.xml
+++ b/examples/storm-pmml-examples/pom.xml
@@ -31,20 +31,6 @@
     <artifactId>storm-pmml-examples</artifactId>
     <name>storm-pmml-examples</name>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-redis-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-redis-examples/pom.xml b/examples/storm-redis-examples/pom.xml
index 92f8b0d..3532237 100644
--- a/examples/storm-redis-examples/pom.xml
+++ b/examples/storm-redis-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-redis-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-solr-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-solr-examples/pom.xml b/examples/storm-solr-examples/pom.xml
index f8d864e..1cfa796 100644
--- a/examples/storm-solr-examples/pom.xml
+++ b/examples/storm-solr-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-solr-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-starter/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-starter/pom.xml b/examples/storm-starter/pom.xml
index c22388b..69acdb8 100644
--- a/examples/storm-starter/pom.xml
+++ b/examples/storm-starter/pom.xml
@@ -31,20 +31,9 @@
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <!-- see comment below... This fixes an annoyance with intellij -->
-    <provided.scope>provided</provided.scope>
     <hbase.version>0.98.4-hadoop2</hbase.version>
   </properties>
 
-  <profiles>
-    <profile>
-        <id>intellij</id>
-        <properties>
-            <provided.scope>compile</provided.scope>
-        </properties>
-    </profile>
-  </profiles>
-
   <dependencies>
     <dependency>
       <groupId>org.hdrhistogram</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/README.md
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/README.md b/external/flux/flux-examples/README.md
deleted file mode 100644
index 3d610b4..0000000
--- a/external/flux/flux-examples/README.md
+++ /dev/null
@@ -1,93 +0,0 @@
-# Flux Examples
-A collection of examples illustrating various capabilities.
-
-## Building From Source and Running
-
-Checkout the projects source and perform a top level Maven build (i.e. from the `flux` directory):
-
-```bash
-git clone https://github.com/apache/storm.git
-cd storm
-mvn install -DskipTests=true
-```
-
-This will create a shaded (i.e. "fat" or "uber") jar in the `external/flux/flux-examples/target` directory that can run/deployed with
-the `storm` command:
-
-```bash
-cd flux-examples
-storm jar ./target/flux-examples-*-SNAPSHOT.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_wordcount.yaml
-```
-
-The example YAML files are also packaged in the examples jar, so they can also be referenced with Flux's `--resource`
-command line switch:
-
-```bash
-storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local --resource /simple_wordcount.yaml
-```
-
-## Available Examples
-
-### [simple_wordcount.yaml](src/main/resources/simple_wordcount.yaml)
-
-This is a very basic wordcount example using Java spouts and bolts. It simply logs the running count of each word
-received.
-
-### [multilang.yaml](src/main/resources/multilang.yaml)
-
-Another wordcount example that uses a spout written in JavaScript (node.js), a bolt written in Python, and two bolts
-written in java.
-
-### [kafka_spout.yaml](src/main/resources/kafka_spout.yaml)
-
-This example illustrates how to configure Storm's `storm-kafka` spout using Flux YAML DSL `components`, `references`,
-and `constructor arguments` constructs.
-
-### [simple_hdfs.yaml](src/main/resources/simple_hdfs.yaml)
-
-This example demonstrates using Flux to setup a storm-hdfs bolt to write to an HDFS cluster. It also demonstrates Flux's
-variable substitution/filtering feature.
-
-To run the `simple_hdfs.yaml` example, copy the `hdfs_bolt.properties` file to a convenient location and change, at
-least, the property `hdfs.url` to point to a HDFS cluster. Then you can run the example something like:
-
-```bash
-storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_hdfs.yaml --filter my_hdfs_bolt.properties
-```
-
-### [simple_hbase.yaml](src/main/resources/simple_hbase.yaml)
-
-This example illustrates how to use Flux to setup a storm-hbase bolt to write to HBase.
-
-To run the `simple_hbase.yaml` example, copy the `hbase_bolt.properties` file to a convenient location and change the properties
- `hbase.rootdir` and `hbase.zookeeper.quorum`. Then you can run the example something like:
-
-```bash
-storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_hbase.yaml --filter my_hbase_bolt.properties
-```
-
-### [simple_windowing.yaml](src/main/resources/simple_windowing.yaml)
-
-This example illustrates how to use Flux to set up a storm topology that contains windowing operations.
-
-To run,
-
-```bash
-storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_windowing.yaml
-```
-
-### [simple_stateful_wordcount.yaml](src/main/resources/simple_stateful_wordcount.yaml)
-
-Flux also supports stateful bolts which is illustrated with this example. It is basically an extension of the basic wordcount example.
-The state is periodically saved (checkpointed) and restored when the topology is restarted.
-
-```bash
-storm jar ./target/flux-examples-*.jar org.apache.storm.flux.Flux --local ./src/main/resources/simple_stateful_wordcount.yaml
-```
-
-By default the state is stored in-memory only. As such you won't see a resumed state unless you configure to use Redis as the state backend.
-Ensure that you have Redis running at `localhost:6379` and that `storm-redis-*.jar` is in the classpath.
-
-```bash
-STORM_EXT_CLASSPATH=../../storm-redis/target storm jar ./target/flux-examples-*.jar -c topology.state.provider=org.apache.storm.redis.state.RedisKeyValueStateProvider org.apache.storm.flux.Flux --local ./src/main/resources/simple_stateful_wordcount.yaml
-```

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/pom.xml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/pom.xml b/external/flux/flux-examples/pom.xml
deleted file mode 100644
index ef56ebd..0000000
--- a/external/flux/flux-examples/pom.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.storm</groupId>
-        <artifactId>flux</artifactId>
-        <version>2.0.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>flux-examples</artifactId>
-    <packaging>jar</packaging>
-
-    <name>flux-examples</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>flux-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>flux-wrappers</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-hdfs</artifactId>
-            <version>${project.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>commons-beanutils</groupId>
-                    <artifactId>commons-beanutils-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>commons-beanutils</groupId>
-                    <artifactId>commons-beanutils</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.apache.hadoop</groupId>
-                    <artifactId>hadoop-yarn-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>javax.servlet</groupId>
-                    <artifactId>servlet-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>javax.servlet</groupId>
-                    <artifactId>javax.servlet-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-hbase</artifactId>
-            <version>${project.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.mortbay.jetty</groupId>
-                    <artifactId>servlet-api-2.5</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>commons-collections</groupId>
-                    <artifactId>commons-collections</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>javax.servlet</groupId>
-                    <artifactId>servlet-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-kafka</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.kafka</groupId>
-            <artifactId>${storm.kafka.artifact.id}</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <configuration>
-                    <createDependencyReducedPom>true</createDependencyReducedPom>
-                    <filters>
-                        <filter>
-                            <artifact>*:*</artifact>
-                            <excludes>
-                                <exclude>META-INF/*.SF</exclude>
-                                <exclude>META-INF/*.sf</exclude>
-                                <exclude>META-INF/*.DSA</exclude>
-                                <exclude>META-INF/*.dsa</exclude>
-                                <exclude>META-INF/*.RSA</exclude>
-                                <exclude>META-INF/*.rsa</exclude>
-                                <exclude>META-INF/*.EC</exclude>
-                                <exclude>META-INF/*.ec</exclude>
-                                <exclude>META-INF/MSFTSIG.SF</exclude>
-                                <exclude>META-INF/MSFTSIG.RSA</exclude>
-                            </excludes>
-                        </filter>
-                    </filters>
-                </configuration>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <transformers>
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                                    <mainClass>org.apache.storm.flux.Flux</mainClass>
-                                </transformer>
-                            </transformers>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java b/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java
deleted file mode 100644
index 5534888..0000000
--- a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/StatefulWordCounter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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 org.apache.storm.flux.examples;
-
-import org.apache.storm.state.KeyValueState;
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.base.BaseStatefulBolt;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.tuple.Values;
-
-import java.util.Map;
-
-public class StatefulWordCounter extends BaseStatefulBolt<KeyValueState<String, Long>> {
-
-    private KeyValueState<String, Long> wordCounts;
-    private OutputCollector collector;
-
-    @SuppressWarnings("rawtypes")
-    @Override
-    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public void initState(KeyValueState<String, Long> state) {
-        wordCounts = state;
-    }
-
-    @Override
-    public void execute(Tuple tuple) {
-        String word = tuple.getString(0);
-
-        Long count = wordCounts.get(word, 0L);
-        count++;
-        wordCounts.put(word, count);
-
-        collector.emit(tuple, new Values(word, count));
-        collector.ack(tuple);
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields("word", "count"));
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java b/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java
deleted file mode 100644
index 137e354..0000000
--- a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestPrintBolt.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 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 org.apache.storm.flux.examples;
-
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseBasicBolt;
-import org.apache.storm.tuple.Tuple;
-
-/**
- * Prints the tuples to stdout
- */
-public class TestPrintBolt extends BaseBasicBolt {
-
-    @Override
-    public void execute(Tuple tuple, BasicOutputCollector collector) {
-        System.out.println(tuple);
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer ofd) {
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java b/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java
deleted file mode 100644
index 8c904d9..0000000
--- a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/TestWindowBolt.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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 org.apache.storm.flux.examples;
-
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseWindowedBolt;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.windowing.TupleWindow;
-
-import java.util.Map;
-
-public class TestWindowBolt extends BaseWindowedBolt {
-    private OutputCollector collector;
-
-    @Override
-    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public void execute(TupleWindow inputWindow) {
-        collector.emit(new Values(inputWindow.get().size()));
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields("count"));
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java b/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java
deleted file mode 100644
index eb4fb7a..0000000
--- a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCountClient.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * 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 org.apache.storm.flux.examples;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.HBaseConfiguration;
-import org.apache.hadoop.hbase.client.Get;
-import org.apache.hadoop.hbase.client.HTable;
-import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.util.Bytes;
-
-import java.io.FileInputStream;
-import java.util.Properties;
-
-/**
- * Connects to the 'WordCount' HBase table and prints counts for each word.
- *
- * Assumes you have run (or are running) the YAML topology definition in
- * <code>simple_hbase.yaml</code>
- *
- * You will also need to modify `src/main/resources/hbase-site.xml`
- * to point to your HBase instance, and then repackage with `mvn package`.
- * This is a known issue.
- *
- */
-public class WordCountClient {
-
-    public static void main(String[] args) throws Exception {
-        Configuration config = HBaseConfiguration.create();
-        if(args.length == 1){
-            Properties props = new Properties();
-            props.load(new FileInputStream(args[0]));
-            System.out.println("HBase configuration:");
-            for(Object key : props.keySet()) {
-                System.out.println(key + "=" + props.get(key));
-                config.set((String)key, props.getProperty((String)key));
-            }
-        } else {
-            System.out.println("Usage: WordCountClient <hbase_config.properties>");
-            System.exit(1);
-        }
-
-        HTable table = new HTable(config, "WordCount");
-        String[] words = new String[] {"nathan", "mike", "jackson", "golda", "bertels"};
-
-        for (String word : words) {
-            Get get = new Get(Bytes.toBytes(word));
-            Result result = table.get(get);
-
-            byte[] countBytes = result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("count"));
-            byte[] wordBytes = result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("word"));
-
-            String wordStr = Bytes.toString(wordBytes);
-            long count = Bytes.toLong(countBytes);
-            System.out.println("Word: '" + wordStr + "', Count: " + count);
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java b/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java
deleted file mode 100644
index 7093105..0000000
--- a/external/flux/flux-examples/src/main/java/org/apache/storm/flux/examples/WordCounter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 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 org.apache.storm.flux.examples;
-
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.IBasicBolt;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseBasicBolt;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Map;
-
-import static org.apache.storm.utils.Utils.tuple;
-
-/**
- * This bolt is used by the HBase example. It simply emits the first field
- * found in the incoming tuple as "word", with a "count" of `1`.
- *
- * In this case, the downstream HBase bolt handles the counting, so a value
- * of `1` will just increment the HBase counter by one.
- */
-public class WordCounter extends BaseBasicBolt {
-    private static final Logger LOG = LoggerFactory.getLogger(WordCounter.class);
-
-
-
-    @SuppressWarnings("rawtypes")
-    public void prepare(Map stormConf, TopologyContext context) {
-    }
-
-    /*
-     * Just output the word value with a count of 1.
-     * The HBaseBolt will handle incrementing the counter.
-     */
-    public void execute(Tuple input, BasicOutputCollector collector) {
-        collector.emit(tuple(input.getValues().get(0), 1));
-    }
-
-    public void cleanup() {
-
-    }
-
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields("word", "count"));
-    }
-
-    @Override
-    public Map<String, Object> getComponentConfiguration() {
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/hbase_bolt.properties
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/hbase_bolt.properties b/external/flux/flux-examples/src/main/resources/hbase_bolt.properties
deleted file mode 100644
index f8ed50c..0000000
--- a/external/flux/flux-examples/src/main/resources/hbase_bolt.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# 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.
-
-hbase.rootdir=hdfs://hadoop:54310/hbase
-hbase.zookeeper.quorum=hadoop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/hdfs_bolt.properties
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/hdfs_bolt.properties b/external/flux/flux-examples/src/main/resources/hdfs_bolt.properties
deleted file mode 100644
index 7bcbe7a..0000000
--- a/external/flux/flux-examples/src/main/resources/hdfs_bolt.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-# 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.
-
-
-# The HDFS url
-hdfs.url=hdfs://hadoop:54310
-
-# The HDFS directory where the bolt will write incoming data
-hdfs.write.dir=/incoming
-
-# The HDFS directory where files will be moved once the bolt has
-# finished writing to it.
-hdfs.dest.dir=/complete
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/kafka_spout.yaml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/kafka_spout.yaml b/external/flux/flux-examples/src/main/resources/kafka_spout.yaml
deleted file mode 100644
index 7533ce4..0000000
--- a/external/flux/flux-examples/src/main/resources/kafka_spout.yaml
+++ /dev/null
@@ -1,136 +0,0 @@
-# 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.
-
-
-# Test ability to wire together shell spouts/bolts
----
-
-# topology definition
-# name to be used when submitting
-name: "kafka-topology"
-
-# Components
-# Components are analagous to Spring beans. They are meant to be used as constructor,
-# property(setter), and builder arguments.
-#
-# for the time being, components must be declared in the order they are referenced
-components:
-  - id: "stringScheme"
-    className: "org.apache.storm.kafka.StringScheme"
-
-  - id: "stringMultiScheme"
-    className: "org.apache.storm.spout.SchemeAsMultiScheme"
-    constructorArgs:
-      - ref: "stringScheme"
-
-  - id: "zkHosts"
-    className: "org.apache.storm.kafka.ZkHosts"
-    constructorArgs:
-      - "localhost:2181"
-
-# Alternative kafka config
-#  - id: "kafkaConfig"
-#    className: "org.apache.storm.kafka.KafkaConfig"
-#    constructorArgs:
-#      # brokerHosts
-#      - ref: "zkHosts"
-#      # topic
-#      - "myKafkaTopic"
-#      # clientId (optional)
-#      - "myKafkaClientId"
-
-  - id: "spoutConfig"
-    className: "org.apache.storm.kafka.SpoutConfig"
-    constructorArgs:
-      # brokerHosts
-      - ref: "zkHosts"
-      # topic
-      - "myKafkaTopic"
-      # zkRoot
-      - "/kafkaSpout"
-      # id
-      - "myId"
-    properties:
-      - name: "ignoreZkOffsets"
-        value: true
-      - name: "scheme"
-        ref: "stringMultiScheme"
-
-
-
-# NOTE: We may want to consider some level of spring integration. For example, allowing component references
-# to a spring `ApplicationContext`.
-
-# topology configuration
-# this will be passed to the submitter as a map of config options
-#
-config:
-  topology.workers: 1
-  # ...
-
-# spout definitions
-spouts:
-  - id: "kafka-spout"
-    className: "org.apache.storm.kafka.KafkaSpout"
-    constructorArgs:
-      - ref: "spoutConfig"
-
-# bolt definitions
-bolts:
-  - id: "splitsentence"
-    className: "org.apache.storm.flux.wrappers.bolts.FluxShellBolt"
-    constructorArgs:
-      # command line
-      - ["python", "splitsentence.py"]
-      # output fields
-      - ["word"]
-    parallelism: 1
-    # ...
-
-  - id: "log"
-    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
-    parallelism: 1
-    # ...
-
-  - id: "count"
-    className: "org.apache.storm.testing.TestWordCounter"
-    parallelism: 1
-    # ...
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-# custom stream groupings are also supported
-
-streams:
-  - name: "kafka --> split" # name isn't used (placeholder for logging, UI, etc.)
-    from: "kafka-spout"
-    to: "splitsentence"
-    grouping:
-      type: SHUFFLE
-
-  - name: "split --> count"
-    from: "splitsentence"
-    to: "count"
-    grouping:
-      type: FIELDS
-      args: ["word"]
-
-  - name: "count --> log"
-    from: "count"
-    to: "log"
-    grouping:
-      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/multilang.yaml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/multilang.yaml b/external/flux/flux-examples/src/main/resources/multilang.yaml
deleted file mode 100644
index aaab5d3..0000000
--- a/external/flux/flux-examples/src/main/resources/multilang.yaml
+++ /dev/null
@@ -1,89 +0,0 @@
-# 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.
-
-# Test ability to wire together shell spouts/bolts
----
-
-# topology definition
-# name to be used when submitting
-name: "shell-topology"
-
-# topology configuration
-# this will be passed to the submitter as a map of config options
-#
-config:
-  topology.workers: 1
-  # ...
-
-# spout definitions
-spouts:
-  - id: "sentence-spout"
-    className: "org.apache.storm.flux.wrappers.spouts.FluxShellSpout"
-    # shell spout constructor takes 2 arguments: String[], String[]
-    constructorArgs:
-      # command line
-      - ["node", "randomsentence.js"]
-      # output fields
-      - ["word"]
-    parallelism: 1
-    # ...
-
-# bolt definitions
-bolts:
-  - id: "splitsentence"
-    className: "org.apache.storm.flux.wrappers.bolts.FluxShellBolt"
-    constructorArgs:
-      # command line
-      - ["python", "splitsentence.py"]
-      # output fields
-      - ["word"]
-    parallelism: 1
-    # ...
-
-  - id: "log"
-    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
-    parallelism: 1
-    # ...
-
-  - id: "count"
-    className: "org.apache.storm.testing.TestWordCounter"
-    parallelism: 1
-    # ...
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-# custom stream groupings are also supported
-
-streams:
-  - name: "spout --> split" # name isn't used (placeholder for logging, UI, etc.)
-    from: "sentence-spout"
-    to: "splitsentence"
-    grouping:
-      type: SHUFFLE
-
-  - name: "split --> count"
-    from: "splitsentence"
-    to: "count"
-    grouping:
-      type: FIELDS
-      args: ["word"]
-
-  - name: "count --> log"
-    from: "count"
-    to: "log"
-    grouping:
-      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/simple_hbase.yaml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/simple_hbase.yaml b/external/flux/flux-examples/src/main/resources/simple_hbase.yaml
deleted file mode 100644
index 93a2781..0000000
--- a/external/flux/flux-examples/src/main/resources/simple_hbase.yaml
+++ /dev/null
@@ -1,92 +0,0 @@
-# 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.
----
-# NOTE: To use this example, you will need to modify `src/main/resources/hbase-site.xml`
-# to point to your HBase instance, and then repackage with `mvn package`.
-# This is a known issue.
-
-# topology definition
-# name to be used when submitting
-name: "hbase-persistent-wordcount"
-
-# Components
-components:
-  - id: "columnFields"
-    className: "org.apache.storm.tuple.Fields"
-    constructorArgs:
-      - ["word"]
-
-  - id: "counterFields"
-    className: "org.apache.storm.tuple.Fields"
-    constructorArgs:
-      - ["count"]
-
-  - id: "mapper"
-    className: "org.apache.storm.hbase.bolt.mapper.SimpleHBaseMapper"
-    configMethods:
-      - name: "withRowKeyField"
-        args: ["word"]
-      - name: "withColumnFields"
-        args: [ref: "columnFields"]
-      - name: "withCounterFields"
-        args: [ref: "counterFields"]
-      - name: "withColumnFamily"
-        args: ["cf"]
-
-# topology configuration
-# this will be passed to the submitter as a map of config options
-config:
-  topology.workers: 1
-  hbase.conf:
-    hbase.rootdir: "${hbase.rootdir}"
-    hbase.zookeeper.quorum: "${hbase.zookeeper.quorum}"
-
-# spout definitions
-spouts:
-  - id: "word-spout"
-    className: "org.apache.storm.testing.TestWordSpout"
-    parallelism: 1
-
-# bolt definitions
-
-bolts:
-  - id: "count-bolt"
-    className: "org.apache.storm.flux.examples.WordCounter"
-    parallelism: 1
-
-  - id: "hbase-bolt"
-    className: "org.apache.storm.hbase.bolt.HBaseBolt"
-    constructorArgs:
-      - "WordCount" # HBase table name
-      - ref: "mapper"
-    configMethods:
-      - name: "withConfigKey"
-        args: ["hbase.conf"]
-    parallelism: 1
-
-streams:
-  - name: "" # name isn't used (placeholder for logging, UI, etc.)
-    from: "word-spout"
-    to: "count-bolt"
-    grouping:
-      type: SHUFFLE
-
-  - name: "" # name isn't used (placeholder for logging, UI, etc.)
-    from: "count-bolt"
-    to: "hbase-bolt"
-    grouping:
-      type: FIELDS
-      args: ["word"]

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/simple_hdfs.yaml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/simple_hdfs.yaml b/external/flux/flux-examples/src/main/resources/simple_hdfs.yaml
deleted file mode 100644
index b8d4020..0000000
--- a/external/flux/flux-examples/src/main/resources/simple_hdfs.yaml
+++ /dev/null
@@ -1,105 +0,0 @@
-# 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.
-
-# Test ability to wire together shell spouts/bolts
----
-
-# topology definition
-# name to be used when submitting
-name: "hdfs-topology"
-
-# Components
-# Components are analagous to Spring beans. They are meant to be used as constructor,
-# property(setter), and builder arguments.
-#
-# for the time being, components must be declared in the order they are referenced
-components:
-  - id: "syncPolicy"
-    className: "org.apache.storm.hdfs.bolt.sync.CountSyncPolicy"
-    constructorArgs:
-      - 1000
-  - id: "rotationPolicy"
-    className: "org.apache.storm.hdfs.bolt.rotation.TimedRotationPolicy"
-    constructorArgs:
-      - 30
-      - SECONDS
-
-  - id: "fileNameFormat"
-    className: "org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat"
-    configMethods:
-      - name: "withPath"
-        args: ["${hdfs.write.dir}"]
-      - name: "withExtension"
-        args: [".txt"]
-
-  - id: "recordFormat"
-    className: "org.apache.storm.hdfs.bolt.format.DelimitedRecordFormat"
-    configMethods:
-      - name: "withFieldDelimiter"
-        args: ["|"]
-
-  - id: "rotationAction"
-    className: "org.apache.storm.hdfs.common.rotation.MoveFileAction"
-    configMethods:
-      - name: "toDestination"
-        args: ["${hdfs.dest.dir}"]
-
-# spout definitions
-spouts:
-  - id: "spout-1"
-    className: "org.apache.storm.testing.TestWordSpout"
-    parallelism: 1
-    # ...
-
-# bolt definitions
-
-bolts:
-  - id: "bolt-1"
-    className: "org.apache.storm.hdfs.bolt.HdfsBolt"
-    configMethods:
-      - name: "withConfigKey"
-        args: ["hdfs.config"]
-      - name: "withFsUrl"
-        args: ["${hdfs.url}"]
-      - name: "withFileNameFormat"
-        args: [ref: "fileNameFormat"]
-      - name: "withRecordFormat"
-        args: [ref: "recordFormat"]
-      - name: "withRotationPolicy"
-        args: [ref: "rotationPolicy"]
-      - name: "withSyncPolicy"
-        args: [ref: "syncPolicy"]
-      - name: "addRotationAction"
-        args: [ref: "rotationAction"]
-    parallelism: 1
-    # ...
-
-  - id: "bolt-2"
-    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
-    parallelism: 1
-
-streams:
-  - name: "" # name isn't used (placeholder for logging, UI, etc.)
-    from: "spout-1"
-    to: "bolt-1"
-    grouping:
-      type: SHUFFLE
-
-  - name: "" # name isn't used (placeholder for logging, UI, etc.)
-    from: "spout-1"
-    to: "bolt-2"
-    grouping:
-      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/simple_stateful_wordcount.yaml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/simple_stateful_wordcount.yaml b/external/flux/flux-examples/src/main/resources/simple_stateful_wordcount.yaml
deleted file mode 100644
index 14b9b3a..0000000
--- a/external/flux/flux-examples/src/main/resources/simple_stateful_wordcount.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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.
-
----
-
-# topology definition
-# name to be used when submitting
-name: "stateful-wordcount-topology"
-
-# topology configuration
-# this will be passed to the submitter as a map of config options
-#
-config:
-  topology.workers: 1
-
-# spout definitions
-spouts:
-  - id: "spout-1"
-    className: "org.apache.storm.testing.TestWordSpout"
-    parallelism: 1
-
-# bolt definitions
-bolts:
-  - id: "bolt-1"
-    className: "org.apache.storm.flux.examples.StatefulWordCounter"
-    parallelism: 1
-
-  - id: "bolt-2"
-    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
-    parallelism: 1
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-streams:
-  - name: "spout-1 --> bolt-1" # name isn't used (placeholder for logging, UI, etc.)
-    from: "spout-1"
-    to: "bolt-1"
-    grouping:
-      type: FIELDS
-      args: ["word"]
-
-  - name: "bolt-1 --> bolt2"
-    from: "bolt-1"
-    to: "bolt-2"
-    grouping:
-      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/simple_windowing.yaml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/simple_windowing.yaml b/external/flux/flux-examples/src/main/resources/simple_windowing.yaml
deleted file mode 100755
index f2f74ff..0000000
--- a/external/flux/flux-examples/src/main/resources/simple_windowing.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-# 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.
-
----
-
-name: "sliding-window-topology"
-
-components:
-  - id: "windowLength"
-    className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
-    constructorArgs:
-      - 5
-  - id: "slidingInterval"
-    className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
-    constructorArgs:
-      - 3
-
-config:
-  topology.workers: 1
-
-# spout definitions
-spouts:
-  - id: "spout-1"
-    className: "org.apache.storm.testing.TestWordSpout"
-    parallelism: 1
-
-# bolt definitions
-bolts:
-  - id: "bolt-1"
-    className: "org.apache.storm.flux.examples.TestWindowBolt"
-    configMethods:
-      - name: "withWindow"
-        args: [ref: "windowLength", ref: "slidingInterval"]
-    parallelism: 1
-  - id: "bolt-2"
-    className: "org.apache.storm.flux.examples.TestPrintBolt"
-    parallelism: 1
-
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-streams:
-  - name: "spout-1 --> bolt-1" # name isn't used (placeholder for logging, UI, etc.)
-#    id: "connection-1"
-    from: "spout-1"
-    to: "bolt-1"
-    grouping:
-      type: FIELDS
-      args: ["word"]
-  - name: "bolt-1 --> bolt-2" # name isn't used (placeholder for logging, UI, etc.)
-#    id: "connection-1"
-    from: "bolt-1"
-    to: "bolt-2"
-    grouping:
-      type: SHUFFLE

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/flux-examples/src/main/resources/simple_wordcount.yaml
----------------------------------------------------------------------
diff --git a/external/flux/flux-examples/src/main/resources/simple_wordcount.yaml b/external/flux/flux-examples/src/main/resources/simple_wordcount.yaml
deleted file mode 100644
index 6443a97..0000000
--- a/external/flux/flux-examples/src/main/resources/simple_wordcount.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-# 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.
-
----
-
-# topology definition
-# name to be used when submitting
-name: "yaml-topology"
-
-# topology configuration
-# this will be passed to the submitter as a map of config options
-#
-config:
-  topology.workers: 1
-
-# spout definitions
-spouts:
-  - id: "spout-1"
-    className: "org.apache.storm.testing.TestWordSpout"
-    parallelism: 1
-
-# bolt definitions
-bolts:
-  - id: "bolt-1"
-    className: "org.apache.storm.testing.TestWordCounter"
-    parallelism: 1
-
-  - id: "bolt-2"
-    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
-    parallelism: 1
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-streams:
-  - name: "spout-1 --> bolt-1" # name isn't used (placeholder for logging, UI, etc.)
-#    id: "connection-1"
-    from: "spout-1"
-    to: "bolt-1"
-    grouping:
-      type: FIELDS
-      args: ["word"]
-
-  - name: "bolt-1 --> bolt2"
-    from: "bolt-1"
-    to: "bolt-2"
-    grouping:
-      type: SHUFFLE
-
-
-
-
-
-
-

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/flux/pom.xml
----------------------------------------------------------------------
diff --git a/external/flux/pom.xml b/external/flux/pom.xml
index b51a505..45a7afb 100644
--- a/external/flux/pom.xml
+++ b/external/flux/pom.xml
@@ -38,30 +38,9 @@
         </developer>
     </developers>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <!-- see comment below... This fixes an annoyance with intellij -->
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <!--
-            Hack to make intellij behave.
-            If you use intellij, enable this profile in your IDE.
-            It should make life easier.
-        -->
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <modules>
         <module>flux-wrappers</module>
         <module>flux-core</module>
-        <module>flux-examples</module>
     </modules>
 
     <dependencies>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/sql/storm-sql-core/pom.xml
----------------------------------------------------------------------
diff --git a/external/sql/storm-sql-core/pom.xml b/external/sql/storm-sql-core/pom.xml
index 776a54c..79b109f 100644
--- a/external/sql/storm-sql-core/pom.xml
+++ b/external/sql/storm-sql-core/pom.xml
@@ -40,13 +40,13 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-sql-runtime</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/sql/storm-sql-external/storm-sql-hdfs/pom.xml
----------------------------------------------------------------------
diff --git a/external/sql/storm-sql-external/storm-sql-hdfs/pom.xml b/external/sql/storm-sql-external/storm-sql-hdfs/pom.xml
index 9e0a599..69f214a 100644
--- a/external/sql/storm-sql-external/storm-sql-hdfs/pom.xml
+++ b/external/sql/storm-sql-external/storm-sql-hdfs/pom.xml
@@ -40,7 +40,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
             <exclusions>
                 <!--log4j-over-slf4j must be excluded for hadoop-minicluster
                     see: http://stackoverflow.com/q/20469026/3542091 -->
@@ -54,7 +54,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-sql-runtime</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
@@ -67,7 +67,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-hdfs</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.hadoop</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/sql/storm-sql-external/storm-sql-kafka/pom.xml
----------------------------------------------------------------------
diff --git a/external/sql/storm-sql-external/storm-sql-kafka/pom.xml b/external/sql/storm-sql-external/storm-sql-kafka/pom.xml
index a7bdf7a..10e2b09 100644
--- a/external/sql/storm-sql-external/storm-sql-kafka/pom.xml
+++ b/external/sql/storm-sql-external/storm-sql-kafka/pom.xml
@@ -40,13 +40,13 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-sql-runtime</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
@@ -59,7 +59,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-kafka</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.kafka</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/sql/storm-sql-external/storm-sql-mongodb/pom.xml
----------------------------------------------------------------------
diff --git a/external/sql/storm-sql-external/storm-sql-mongodb/pom.xml b/external/sql/storm-sql-external/storm-sql-mongodb/pom.xml
index 40fde8a..6d15803 100644
--- a/external/sql/storm-sql-external/storm-sql-mongodb/pom.xml
+++ b/external/sql/storm-sql-external/storm-sql-mongodb/pom.xml
@@ -40,13 +40,13 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-sql-runtime</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
@@ -59,7 +59,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-mongodb</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>junit</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/sql/storm-sql-external/storm-sql-redis/pom.xml
----------------------------------------------------------------------
diff --git a/external/sql/storm-sql-external/storm-sql-redis/pom.xml b/external/sql/storm-sql-external/storm-sql-redis/pom.xml
index 19cc699..5997376 100644
--- a/external/sql/storm-sql-external/storm-sql-redis/pom.xml
+++ b/external/sql/storm-sql-external/storm-sql-redis/pom.xml
@@ -32,13 +32,13 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-sql-runtime</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.storm</groupId>
@@ -51,7 +51,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-redis</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>junit</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/sql/storm-sql-runtime/pom.xml
----------------------------------------------------------------------
diff --git a/external/sql/storm-sql-runtime/pom.xml b/external/sql/storm-sql-runtime/pom.xml
index 4666df4..08a776c 100644
--- a/external/sql/storm-sql-runtime/pom.xml
+++ b/external/sql/storm-sql-runtime/pom.xml
@@ -40,7 +40,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.calcite</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-cassandra/pom.xml b/external/storm-cassandra/pom.xml
index 0eff9f6..d912ecc 100644
--- a/external/storm-cassandra/pom.xml
+++ b/external/storm-cassandra/pom.xml
@@ -73,7 +73,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
 
         <dependency>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-druid/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-druid/pom.xml b/external/storm-druid/pom.xml
index d1949a4..3f9601c 100644
--- a/external/storm-druid/pom.xml
+++ b/external/storm-druid/pom.xml
@@ -34,7 +34,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>io.druid</groupId>
@@ -90,44 +90,4 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <filters>
-                                <filter>
-                                    <artifact>*:*</artifact>
-                                    <excludes>
-                                        <exclude>META-INF/*.SF</exclude>
-                                        <exclude>META-INF/*.DSA</exclude>
-                                        <exclude>META-INF/*.RSA</exclude>
-                                    </excludes>
-                                </filter>
-                            </filters>
-                            <relocations>
-                                <relocation>
-                                    <pattern>com.fasterxml.jackson</pattern>
-                                    <shadedPattern>org.apache.storm.druid.bolt.com.fasterxml.jackson</shadedPattern>
-                                </relocation>
-                                <relocation>
-                                    <pattern>org.jboss.netty</pattern>
-                                    <shadedPattern>org.apache.storm.druid.bolt.org.jboss.netty</shadedPattern>
-                                </relocation>
-                            </relocations>
-                            <createDependencyReducedPom>true</createDependencyReducedPom>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-elasticsearch/pom.xml b/external/storm-elasticsearch/pom.xml
index 09d4794..c676179 100644
--- a/external/storm-elasticsearch/pom.xml
+++ b/external/storm-elasticsearch/pom.xml
@@ -50,7 +50,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.elasticsearch</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-eventhubs/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-eventhubs/pom.xml b/external/storm-eventhubs/pom.xml
index 21738a5..05d8c3b 100755
--- a/external/storm-eventhubs/pom.xml
+++ b/external/storm-eventhubs/pom.xml
@@ -17,75 +17,37 @@
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-
+    
     <parent>
         <artifactId>storm</artifactId>
         <groupId>org.apache.storm</groupId>
         <version>2.0.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-
+    
     <artifactId>storm-eventhubs</artifactId>
-    <version>2.0.0-SNAPSHOT</version>
     <packaging>jar</packaging>
     <name>storm-eventhubs</name>
     <description>EventHubs Storm Spout</description>
-
+    
     <build>
         <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <phase>package</phase>
-                    </execution>
-                </executions>
-                <configuration>
-                    <transformers>
-                        <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
-                        </transformer>
-                    </transformers>
-                    <outputFile>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</outputFile>
-                    <createDependencyReducedPom>true</createDependencyReducedPom>
-                    <filters>
-                        <filter>
-                            <artifact>*:*</artifact>
-                            <excludes>
-                                <exclude>META-INF/*.SF</exclude>
-                                <exclude>META-INF/*.sf</exclude>
-                                <exclude>META-INF/*.DSA</exclude>
-                                <exclude>META-INF/*.dsa</exclude>
-                                <exclude>META-INF/*.RSA</exclude>
-                                <exclude>META-INF/*.rsa</exclude>
-                                <exclude>META-INF/*.EC</exclude>
-                                <exclude>META-INF/*.ec</exclude>
-                                <exclude>META-INF/MSFTSIG.SF</exclude>
-                                <exclude>META-INF/MSFTSIG.RSA</exclude>
-                            </excludes>
-                        </filter>
-                    </filters>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <configuration>
-                            <tasks>
-                                <copy file="src/main/resources/config.properties" tofile="target/eventhubs-config.properties" />
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
+             <plugin>
+		        <artifactId>maven-antrun-plugin</artifactId>
+		        <executions>
+		          <execution>
+		            <phase>package</phase>
+		            <configuration>
+		              <tasks>
+		                <copy file="src/main/resources/config.properties" tofile="target/eventhubs-config.properties" />
+                    </tasks>
+		            </configuration>
+		            <goals>
+		              <goal>run</goal>
+		            </goals>
+		          </execution>
+		        </executions>
+	        </plugin>
         </plugins>
     </build>
     <dependencies>
@@ -100,7 +62,7 @@
             <version>${project.version}</version>
             <!-- keep storm out of the jar-with-dependencies -->
             <type>jar</type>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.curator</groupId>
@@ -132,5 +94,11 @@
             <artifactId>qpid-amqp-1-0-common</artifactId>
             <version>${qpid.version}</version>
         </dependency>
-    </dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies> 
 </project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-hbase/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-hbase/pom.xml b/external/storm-hbase/pom.xml
index 293961d..3d6aa0c 100644
--- a/external/storm-hbase/pom.xml
+++ b/external/storm-hbase/pom.xml
@@ -46,7 +46,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.hbase</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-hdfs/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-hdfs/pom.xml b/external/storm-hdfs/pom.xml
index aba0da6..281732e 100644
--- a/external/storm-hdfs/pom.xml
+++ b/external/storm-hdfs/pom.xml
@@ -47,7 +47,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
             <exclusions>
                 <!--log4j-over-slf4j must be excluded for hadoop-minicluster
                     see: http://stackoverflow.com/q/20469026/3542091 -->

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-hive/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-hive/pom.xml b/external/storm-hive/pom.xml
index a564e85..d4d076d 100644
--- a/external/storm-hive/pom.xml
+++ b/external/storm-hive/pom.xml
@@ -42,7 +42,7 @@
       <groupId>org.apache.storm</groupId>
       <artifactId>storm-core</artifactId>
       <version>${project.version}</version>
-      <scope>provided</scope>
+      <scope>${provided.scope}</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-jdbc/pom.xml b/external/storm-jdbc/pom.xml
index a8c3de0..1ab2e1c 100644
--- a/external/storm-jdbc/pom.xml
+++ b/external/storm-jdbc/pom.xml
@@ -44,7 +44,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/pom.xml b/external/storm-jms/core/pom.xml
deleted file mode 100644
index 2e435e7..0000000
--- a/external/storm-jms/core/pom.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.storm</groupId>
-        <artifactId>storm-jms-parent</artifactId>
-        <version>2.0.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-
-
-    <artifactId>storm-jms</artifactId>
-
-
-
-    <developers>
-        <developer>
-            <id>ptgoetz</id>
-            <name>P. Taylor Goetz</name>
-            <email>ptgoetz@gmail.com</email>
-        </developer>
-    </developers>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-core</artifactId>
-            <version>${project.version}</version>
-            <!-- keep storm out of the jar-with-dependencies -->
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-jms_1.1_spec</artifactId>
-            <version>1.1.1</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.10</version>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- Active MQ -->
-        <dependency>
-            <groupId>org.apache.activemq</groupId>
-            <artifactId>activemq-core</artifactId>
-            <version>5.5.1</version>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-    </dependencies>
-
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.9</version>
-                <configuration>
-                    <additionalparam>-Xdoclint:none</additionalparam>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsMessageProducer.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsMessageProducer.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsMessageProducer.java
deleted file mode 100644
index 4932929..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsMessageProducer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 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 org.apache.storm.jms;
-
-import java.io.Serializable;
-
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
-
-import org.apache.storm.tuple.ITuple;
-
-/**
- * JmsMessageProducer implementations are responsible for translating
- * a <code>org.apache.storm.tuple.Values</code> instance into a
- * <code>javax.jms.Message</code> object.
- * <p>
- */
-public interface JmsMessageProducer extends Serializable {
-
-    /**
-     * Translate a <code>org.apache.storm.tuple.Tuple</code> object
-     * to a <code>javax.jms.Message</code object.
-     *
-     * @param session
-     * @param input
-     * @return
-     * @throws JMSException
-     */
-    public Message toMessage(Session session, ITuple input) throws JMSException;
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsProvider.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsProvider.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsProvider.java
deleted file mode 100644
index d976326..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsProvider.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 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 org.apache.storm.jms;
-
-import java.io.Serializable;
-
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-
-/**
- * A <code>JmsProvider</code> object encapsulates the <code>ConnectionFactory</code>
- * and <code>Destination</code> JMS objects the <code>JmsSpout</code> needs to manage
- * a topic/queue connection over the course of it's lifecycle.
- *
- */
-public interface JmsProvider extends Serializable {
-    /**
-     * Provides the JMS <code>ConnectionFactory</code>
-     *
-     * @return the connection factory
-     * @throws Exception
-     */
-    public ConnectionFactory connectionFactory() throws Exception;
-
-    /**
-     * Provides the <code>Destination</code> (topic or queue) from which the
-     * <code>JmsSpout</code> will receive messages.
-     *
-     * @return
-     * @throws Exception
-     */
-    public Destination destination() throws Exception;
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsTupleProducer.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsTupleProducer.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsTupleProducer.java
deleted file mode 100644
index 0bbb3a0..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/JmsTupleProducer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 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 org.apache.storm.jms;
-
-import java.io.Serializable;
-
-import javax.jms.JMSException;
-import javax.jms.Message;
-
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Values;
-
-/**
- * Interface to define classes that can produce a Storm <code>Values</code> objects
- * from a <code>javax.jms.Message</code> object>.
- * <p>
- * Implementations are also responsible for declaring the output
- * fields they produce.
- * <p>
- * If for some reason the implementation can't process a message
- * (for example if it received a <code>javax.jms.ObjectMessage</code>
- * when it was expecting a <code>javax.jms.TextMessage</code> it should
- * return <code>null</code> to indicate to the <code>JmsSpout</code> that
- * the message could not be processed.
- *
- */
-public interface JmsTupleProducer extends Serializable {
-    /**
-     * Process a JMS message object to create a Values object.
-     *
-     * @param msg - the JMS message
-     * @return the Values tuple, or null if the message couldn't be processed.
-     * @throws JMSException
-     */
-    Values toTuple(Message msg) throws JMSException;
-
-    /**
-     * Declare the output fields produced by this JmsTupleProducer.
-     *
-     * @param declarer The OuputFieldsDeclarer for the spout.
-     */
-    void declareOutputFields(OutputFieldsDeclarer declarer);
-}


[02/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java b/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java
deleted file mode 100755
index a934120..0000000
--- a/storm-perf/src/main/java/org/apache/storm/perf/utils/MetricsSample.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * 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 org.apache.storm.perf.utils;
-
-import org.apache.storm.LocalCluster;
-import org.apache.storm.generated.ClusterSummary;
-import org.apache.storm.generated.ExecutorSpecificStats;
-import org.apache.storm.generated.ExecutorStats;
-import org.apache.storm.generated.ExecutorSummary;
-import org.apache.storm.generated.Nimbus;
-import org.apache.storm.generated.SpoutStats;
-import org.apache.storm.generated.TopologyInfo;
-import org.apache.storm.generated.TopologySummary;
-import org.apache.storm.utils.Utils;
-
-import java.util.List;
-import java.util.Map;
-
-public class MetricsSample {
-
-    private long sampleTime = -1;
-    private long totalTransferred = 0l;
-    private long totalEmitted = 0l;
-    private long totalAcked = 0l;
-    private long totalFailed = 0l;
-
-    private double totalLatency;
-
-    private long spoutEmitted = 0l;
-    private long spoutTransferred = 0l;
-    private int spoutExecutors = 0;
-
-    private int numSupervisors = 0;
-    private int numWorkers = 0;
-    private int numTasks = 0;
-    private int numExecutors = 0;
-
-    private int totalSlots = 0;
-    private int usedSlots = 0;
-
-    public static MetricsSample factory(Nimbus.Client client, String topologyName) throws Exception {
-        // "************ Sampling Metrics *****************
-
-        ClusterSummary clusterSummary = client.getClusterInfo();
-        // get topology info
-        TopologySummary topSummary = getTopologySummary(clusterSummary, topologyName);
-        int topologyExecutors = topSummary.get_num_executors();
-        int topologyWorkers = topSummary.get_num_workers();
-        int topologyTasks = topSummary.get_num_tasks();
-        TopologyInfo topInfo = client.getTopologyInfo(topSummary.get_id());
-
-        MetricsSample sample =  getMetricsSample( topInfo);
-        sample.numWorkers = topologyWorkers;
-        sample.numExecutors = topologyExecutors;
-        sample.numTasks = topologyTasks;
-        return sample;
-    }
-
-    public static MetricsSample factory(LocalCluster localCluster, String topologyName) throws Exception {
-        TopologyInfo topologyInfo = localCluster.getTopologyInfo(topologyName);;
-        return getMetricsSample(topologyInfo);
-    }
-
-
-    private static MetricsSample getMetricsSample(TopologyInfo topInfo) {
-        List<ExecutorSummary> executorSummaries = topInfo.get_executors();
-
-        // totals
-        long totalTransferred = 0l;
-        long totalEmitted = 0l;
-        long totalAcked = 0l;
-        long totalFailed = 0l;
-
-        // number of spout executors
-        int spoutExecCount = 0;
-        double spoutLatencySum = 0.0;
-
-        long spoutEmitted = 0l;
-        long spoutTransferred = 0l;
-
-        // Executor summaries
-        for(ExecutorSummary executorSummary : executorSummaries){
-            ExecutorStats execuatorStats = executorSummary.get_stats();
-            if(execuatorStats == null){
-                continue;
-            }
-
-            ExecutorSpecificStats executorSpecificStats = execuatorStats.get_specific();
-            if(executorSpecificStats == null){
-                // bail out
-                continue;
-            }
-
-            // transferred totals
-            Map<String,Map<String,Long>> transferred = execuatorStats.get_transferred();
-            Map<String, Long> txMap = transferred.get(":all-time");
-            if(txMap == null){
-                continue;
-            }
-            for(String key : txMap.keySet()){
-                // todo, ignore the master batch coordinator ?
-                if(!Utils.isSystemId(key)){
-                    Long count = txMap.get(key);
-                    totalTransferred += count;
-                    if(executorSpecificStats.is_set_spout()){
-                        spoutTransferred += count;
-                    }
-                }
-            }
-
-            // we found a spout
-            if(executorSpecificStats.isSet(2)) { // spout
-
-                SpoutStats spoutStats = executorSpecificStats.get_spout();
-                Map<String, Long> acked = spoutStats.get_acked().get(":all-time");
-                if(acked != null){
-                    for(String key : acked.keySet()) {
-                        totalAcked += acked.get(key);
-                    }
-                }
-
-                Map<String, Long> failed = spoutStats.get_failed().get(":all-time");
-                if(failed != null){
-                    for(String key : failed.keySet()) {
-                        totalFailed += failed.get(key);
-                    }
-                }
-
-                Double total = 0d;
-                Map<String, Double> vals = spoutStats.get_complete_ms_avg().get(":all-time");
-                for(String key : vals.keySet()){
-                    total += vals.get(key);
-                }
-                Double latency = total / vals.size();
-
-                spoutExecCount++;
-                spoutLatencySum += latency;
-            }
-
-
-        } // end executor summary
-
-        MetricsSample ret = new MetricsSample();
-        ret.totalEmitted = totalEmitted;
-        ret.totalTransferred = totalTransferred;
-        ret.totalAcked  = totalAcked;
-        ret.totalFailed = totalFailed;
-        ret.totalLatency = spoutLatencySum/spoutExecCount;
-        ret.spoutEmitted = spoutEmitted;
-        ret.spoutTransferred = spoutTransferred;
-        ret.sampleTime = System.currentTimeMillis();
-//        ret.numSupervisors = clusterSummary.get_supervisors_size();
-        ret.numWorkers = 0;
-        ret.numExecutors = 0;
-        ret.numTasks = 0;
-        ret.spoutExecutors = spoutExecCount;
-        return ret;
-    }
-
-    public static TopologySummary getTopologySummary(ClusterSummary cs, String name) {
-        for (TopologySummary ts : cs.get_topologies()) {
-            if (name.equals(ts.get_name())) {
-                return ts;
-            }
-        }
-        return null;
-    }
-
-
-
-    // getters
-    public long getSampleTime() {
-        return sampleTime;
-    }
-
-    public long getTotalTransferred() {
-        return totalTransferred;
-    }
-
-    public long getTotalEmitted() {
-        return totalEmitted;
-    }
-
-    public long getTotalAcked() {
-        return totalAcked;
-    }
-
-    public long getTotalFailed() {
-        return totalFailed;
-    }
-
-    public double getTotalLatency() {
-        return totalLatency;
-    }
-
-    public long getSpoutEmitted() {
-        return spoutEmitted;
-    }
-
-    public long getSpoutTransferred() {
-        return spoutTransferred;
-    }
-
-    public int getNumSupervisors() {
-        return numSupervisors;
-    }
-
-    public int getNumWorkers() {
-        return numWorkers;
-    }
-
-    public int getNumTasks() {
-        return numTasks;
-    }
-
-    public int getTotalSlots() {
-        return totalSlots;
-    }
-
-    public int getSpoutExecutors(){
-        return this.spoutExecutors;
-    }
-
-    public int getNumExecutors() {
-        return this.numExecutors;
-    }
-
-    public int getUsedSlots() {
-        return this.usedSlots;
-    }
-
-}
\ No newline at end of file


[05/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/pom.xml b/external/storm-mqtt/core/pom.xml
deleted file mode 100644
index dbb0396..0000000
--- a/external/storm-mqtt/core/pom.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>storm-mqtt</artifactId>
-    <packaging>jar</packaging>
-
-    <name>storm-mqtt</name>
-
-    <parent>
-        <groupId>org.apache.storm</groupId>
-        <artifactId>storm-mqtt-parent</artifactId>
-        <version>2.0.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-
-
-
-    <repositories>
-        <repository>
-            <id>bintray</id>
-            <url>http://dl.bintray.com/andsel/maven/</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.activemq</groupId>
-            <artifactId>activemq-broker</artifactId>
-            <version>5.9.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.activemq</groupId>
-            <artifactId>activemq-mqtt</artifactId>
-            <version>5.9.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.activemq</groupId>
-            <artifactId>activemq-kahadb-store</artifactId>
-            <version>5.9.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-core</artifactId>
-            <version>${project.version}</version>
-            <scope>${provided.scope}</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.fusesource.mqtt-client</groupId>
-            <artifactId>mqtt-client</artifactId>
-            <version>1.10</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.5</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <forkMode>perTest</forkMode>
-                    <enableAssertions>false</enableAssertions>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                    <excludedGroups>${java.unit.test.exclude}</excludedGroups>
-                    <includes>
-                        <include>${java.unit.test.include}</include>
-                    </includes>
-                    <argLine>-Djava.net.preferIPv4Stack=true -Xmx1536m</argLine>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <version>${maven-surefire.version}</version>
-                <configuration>
-                    <forkMode>perTest</forkMode>
-                    <enableAssertions>false</enableAssertions>
-                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                    <includes>
-                        <include>${java.integration.test.include}</include>
-                    </includes>
-                    <groups>${java.integration.test.group}</groups>  <!--set in integration-test the profile-->
-                    <argLine>-Djava.net.preferIPv4Stack=true -Xmx1536m</argLine>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>integration-test</goal>
-                            <goal>verify</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttLogger.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttLogger.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttLogger.java
deleted file mode 100644
index 3af73fd..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttLogger.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt;
-
-import org.fusesource.mqtt.client.Tracer;
-import org.fusesource.mqtt.codec.MQTTFrame;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Wrapper around SLF4J logger that allows MQTT messages to be logged.
- */
-public class MqttLogger extends Tracer {
-    private static final Logger LOG = LoggerFactory.getLogger(MqttLogger.class);
-
-    @Override
-    public void debug(String message, Object... args) {
-        LOG.debug(String.format(message, args));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessage.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessage.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessage.java
deleted file mode 100644
index 5436dda..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessage.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt;
-
-/**
- * Represents an MQTT Message consisting of a topic string (e.g. "/users/ptgoetz/office/thermostat")
- * and a byte array message/payload.
- *
- */
-public class MqttMessage {
-    private String topic;
-    private byte[] message;
-
-
-    public MqttMessage(String topic, byte[] payload){
-        this.topic = topic;
-        this.message = payload;
-    }
-    public byte[] getMessage(){
-        return this.message;
-    }
-
-    public String getTopic(){
-        return this.topic;
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java
deleted file mode 100644
index c6173f4..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt;
-
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-
-import java.io.Serializable;
-
-/**
- * Represents an object that can be converted to a Storm Tuple from an AckableMessage,
- * given a MQTT Topic Name and a byte array payload.
- */
-public interface MqttMessageMapper extends Serializable {
-    /**
-     * Convert a `MqttMessage` to a set of Values that can be emitted as a Storm Tuple.
-     *
-     * @param message An MQTT Message.
-     * @return Values representing a Storm Tuple.
-     */
-    Values toValues(MqttMessage message);
-
-    /**
-     * Returns the list of output fields this Mapper produces.
-     *
-     * @return the list of output fields this mapper produces.
-     */
-    Fields outputFields();
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java
deleted file mode 100644
index c46c069..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt;
-
-
-import org.apache.storm.tuple.ITuple;
-
-import java.io.Serializable;
-
-/**
- * Given a Tuple, converts it to an MQTT message.
- */
-public interface MqttTupleMapper extends Serializable{
-
-    /**
-     * Converts a Tuple to a MqttMessage
-     * @param tuple the incoming tuple
-     * @return the message to publish
-     */
-    MqttMessage toMessage(ITuple tuple);
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java
deleted file mode 100644
index f6ca1bf..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.bolt;
-
-import org.apache.storm.Config;
-import org.apache.storm.mqtt.MqttMessage;
-import org.apache.storm.mqtt.common.MqttOptions;
-import org.apache.storm.mqtt.MqttTupleMapper;
-import org.apache.storm.mqtt.common.MqttPublisher;
-import org.apache.storm.mqtt.common.SslUtils;
-import org.apache.storm.mqtt.ssl.KeyStoreLoader;
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichBolt;
-import org.apache.storm.topology.base.BaseTickTupleAwareRichBolt;
-import org.apache.storm.tuple.Tuple;
-import org.apache.storm.utils.TupleUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Map;
-
-
-public class MqttBolt extends BaseTickTupleAwareRichBolt {
-    private static final Logger LOG = LoggerFactory.getLogger(MqttBolt.class);
-    private MqttTupleMapper mapper;
-    private transient MqttPublisher publisher;
-    private boolean retain = false;
-    private transient OutputCollector collector;
-    private MqttOptions options;
-    private KeyStoreLoader keyStoreLoader;
-    private transient String topologyName;
-
-
-    public MqttBolt(MqttOptions options, MqttTupleMapper mapper){
-        this(options, mapper, null, false);
-    }
-
-    public MqttBolt(MqttOptions options, MqttTupleMapper mapper, boolean retain){
-        this(options, mapper, null, retain);
-    }
-
-    public MqttBolt(MqttOptions options, MqttTupleMapper mapper, KeyStoreLoader keyStoreLoader){
-        this(options, mapper, keyStoreLoader, false);
-    }
-
-    public MqttBolt(MqttOptions options, MqttTupleMapper mapper, KeyStoreLoader keyStoreLoader, boolean retain){
-        this.options = options;
-        this.mapper = mapper;
-        this.retain = retain;
-        this.keyStoreLoader = keyStoreLoader;
-        // the following code is duplicated in the constructor of MqttPublisher
-        // we reproduce it here so we fail on the client side if SSL is misconfigured, rather than when the topology
-        // is deployed to the cluster
-        SslUtils.checkSslConfig(this.options.getUrl(), keyStoreLoader);
-    }
-
-    @Override
-    public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
-        this.collector = collector;
-        this.topologyName = (String)conf.get(Config.TOPOLOGY_NAME);
-        this.publisher = new MqttPublisher(this.options, this.keyStoreLoader, this.retain);
-        try {
-            this.publisher.connectMqtt(this.topologyName + "-" + context.getThisComponentId() + "-" + context.getThisTaskId());
-        } catch (Exception e) {
-            LOG.error("Unable to connect to MQTT Broker.", e);
-            throw new RuntimeException("Unable to connect to MQTT Broker.", e);
-        }
-    }
-
-    @Override
-    protected void process(Tuple input) {
-        MqttMessage message = this.mapper.toMessage(input);
-        try {
-            this.publisher.publish(message);
-            this.collector.ack(input);
-        } catch (Exception e) {
-            LOG.warn("Error publishing MQTT message. Failing tuple.", e);
-            // should we fail the tuple or kill the worker?
-            collector.reportError(e);
-            collector.fail(input);
-        }
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        // this bolt does not emit tuples
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java
deleted file mode 100644
index 2b09d6e..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.common;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * MQTT Configuration Options
- */
-public class MqttOptions implements Serializable {
-    private String url = "tcp://localhost:1883";
-    private List<String> topics = null;
-    private boolean cleanConnection = false;
-
-    private String willTopic;
-    private String willPayload;
-    private int willQos = 1;
-    private boolean willRetain = false;
-
-    private long reconnectDelay = 10;
-    private long reconnectDelayMax = 30*1000;
-    private double reconnectBackOffMultiplier = 2.0f;
-    private long reconnectAttemptsMax = -1;
-    private long connectAttemptsMax = -1;
-
-    private String userName = "";
-    private String password = "";
-
-    private int qos = 1;
-
-    public String getUrl() {
-        return url;
-    }
-
-    /**
-     * Sets the url for connecting to the MQTT broker.
-     *
-     * Default: `tcp://localhost:1883'
-     * @param url
-     */
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public List<String> getTopics() {
-        return topics;
-    }
-
-    /**
-     * A list of MQTT topics to subscribe to.
-     *
-     * @param topics
-     */
-    public void setTopics(List<String> topics) {
-        this.topics = topics;
-    }
-
-    public boolean isCleanConnection() {
-        return cleanConnection;
-    }
-
-    /**
-     * Set to false if you want the MQTT server to persist topic subscriptions and ack positions across client sessions.
-     * Defaults to false.
-     *
-     * @param cleanConnection
-     */
-    public void setCleanConnection(boolean cleanConnection) {
-        this.cleanConnection = cleanConnection;
-    }
-
-    public String getWillTopic() {
-        return willTopic;
-    }
-
-    /**
-     * If set the server will publish the client's Will message to the specified topics if the client has an unexpected
-     * disconnection.
-     *
-     * @param willTopic
-     */
-    public void setWillTopic(String willTopic) {
-        this.willTopic = willTopic;
-    }
-
-    public String getWillPayload() {
-        return willPayload;
-    }
-
-    /**
-     * The Will message to send. Defaults to a zero length message.
-     *
-     * @param willPayload
-     */
-    public void setWillPayload(String willPayload) {
-        this.willPayload = willPayload;
-    }
-
-    public long getReconnectDelay() {
-        return reconnectDelay;
-    }
-
-    /**
-     * How long to wait in ms before the first reconnect attempt. Defaults to 10.
-     *
-     * @param reconnectDelay
-     */
-    public void setReconnectDelay(long reconnectDelay) {
-        this.reconnectDelay = reconnectDelay;
-    }
-
-    public long getReconnectDelayMax() {
-        return reconnectDelayMax;
-    }
-
-    /**
-     * The maximum amount of time in ms to wait between reconnect attempts. Defaults to 30,000.
-     *
-     * @param reconnectDelayMax
-     */
-    public void setReconnectDelayMax(long reconnectDelayMax) {
-        this.reconnectDelayMax = reconnectDelayMax;
-    }
-
-    public double getReconnectBackOffMultiplier() {
-        return reconnectBackOffMultiplier;
-    }
-
-    /**
-     * The Exponential backoff be used between reconnect attempts. Set to 1 to disable exponential backoff. Defaults to
-     * 2.
-     *
-     * @param reconnectBackOffMultiplier
-     */
-    public void setReconnectBackOffMultiplier(double reconnectBackOffMultiplier) {
-        this.reconnectBackOffMultiplier = reconnectBackOffMultiplier;
-    }
-
-    public long getReconnectAttemptsMax() {
-        return reconnectAttemptsMax;
-    }
-
-    /**
-     * The maximum number of reconnect attempts before an error is reported back to the client after a server
-     * connection had previously been established. Set to -1 to use unlimited attempts. Defaults to -1.
-     *
-     * @param reconnectAttemptsMax
-     */
-    public void setReconnectAttemptsMax(long reconnectAttemptsMax) {
-        this.reconnectAttemptsMax = reconnectAttemptsMax;
-    }
-
-    public long getConnectAttemptsMax() {
-        return connectAttemptsMax;
-    }
-
-    /**
-     * The maximum number of reconnect attempts before an error is reported back to the client on the first attempt by
-     * the client to connect to a server. Set to -1 to use unlimited attempts. Defaults to -1.
-     *
-     * @param connectAttemptsMax
-     */
-    public void setConnectAttemptsMax(long connectAttemptsMax) {
-        this.connectAttemptsMax = connectAttemptsMax;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    /**
-     * The username for authenticated sessions.
-     *
-     * @param userName
-     */
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    /**
-     * The password for authenticated sessions.
-     * @param password
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public int getQos(){
-        return this.qos;
-    }
-
-    /**
-     * Sets the quality of service to use for MQTT messages. Defaults to 1 (at least once).
-     * @param qos
-     */
-    public void setQos(int qos){
-        if(qos < 0 || qos > 2){
-            throw new IllegalArgumentException("MQTT QoS must be >= 0 and <= 2");
-        }
-        this.qos = qos;
-    }
-
-    public int getWillQos(){
-        return this.willQos;
-    }
-
-    /**
-     * Sets the quality of service to use for the MQTT Will message. Defaults to 1 (at least once).
-     *
-     * @param qos
-     */
-    public void setWillQos(int qos){
-        if(qos < 0 || qos > 2){
-            throw new IllegalArgumentException("MQTT Will QoS must be >= 0 and <= 2");
-        }
-        this.willQos = qos;
-    }
-
-    public boolean getWillRetain(){
-        return this.willRetain;
-    }
-
-    /**
-     * Set to true if you want the Will message to be published with the retain option.
-     * @param retain
-     */
-    public void setWillRetain(boolean retain){
-        this.willRetain = retain;
-    }
-
-    public static class Builder {
-        private MqttOptions options = new MqttOptions();
-
-        public Builder url(String url) {
-            this.options.url = url;
-            return this;
-        }
-
-
-        public Builder topics(List<String> topics) {
-            this.options.topics = topics;
-            return this;
-        }
-
-        public Builder cleanConnection(boolean cleanConnection) {
-            this.options.cleanConnection = cleanConnection;
-            return this;
-        }
-
-        public Builder willTopic(String willTopic) {
-            this.options.willTopic = willTopic;
-            return this;
-        }
-
-        public Builder willPayload(String willPayload) {
-            this.options.willPayload = willPayload;
-            return this;
-        }
-
-        public Builder willRetain(boolean retain){
-            this.options.willRetain = retain;
-            return this;
-        }
-
-        public Builder willQos(int qos){
-            this.options.setWillQos(qos);
-            return this;
-        }
-
-        public Builder reconnectDelay(long reconnectDelay) {
-            this.options.reconnectDelay = reconnectDelay;
-            return this;
-        }
-
-        public Builder reconnectDelayMax(long reconnectDelayMax) {
-            this.options.reconnectDelayMax = reconnectDelayMax;
-            return this;
-        }
-
-        public Builder reconnectBackOffMultiplier(double reconnectBackOffMultiplier) {
-            this.options.reconnectBackOffMultiplier = reconnectBackOffMultiplier;
-            return this;
-        }
-
-        public Builder reconnectAttemptsMax(long reconnectAttemptsMax) {
-            this.options.reconnectAttemptsMax = reconnectAttemptsMax;
-            return this;
-        }
-
-        public Builder connectAttemptsMax(long connectAttemptsMax) {
-            this.options.connectAttemptsMax = connectAttemptsMax;
-            return this;
-        }
-
-        public Builder userName(String userName) {
-            this.options.userName = userName;
-            return this;
-        }
-
-        public Builder password(String password) {
-            this.options.password = password;
-            return this;
-        }
-
-        public Builder qos(int qos){
-            this.options.setQos(qos);
-            return this;
-        }
-
-        public MqttOptions build() {
-            return this.options;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java
deleted file mode 100644
index 9b36b78..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.common;
-
-
-import org.apache.storm.mqtt.MqttLogger;
-import org.apache.storm.mqtt.MqttMessage;
-import org.apache.storm.mqtt.ssl.KeyStoreLoader;
-import org.fusesource.mqtt.client.BlockingConnection;
-import org.fusesource.mqtt.client.MQTT;
-import org.fusesource.mqtt.client.QoS;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.URI;
-
-public class MqttPublisher {
-    private static final Logger LOG = LoggerFactory.getLogger(MqttPublisher.class);
-
-    private MqttOptions options;
-    private transient BlockingConnection connection;
-    private KeyStoreLoader keyStoreLoader;
-    private QoS qos;
-    private boolean retain = false;
-
-
-    public MqttPublisher(MqttOptions options){
-        this(options, null, false);
-    }
-
-    public MqttPublisher(MqttOptions options, boolean retain){
-        this(options, null, retain);
-    }
-
-    public MqttPublisher(MqttOptions options, KeyStoreLoader keyStoreLoader, boolean retain){
-        this.retain = retain;
-        this.options = options;
-        this.keyStoreLoader = keyStoreLoader;
-        SslUtils.checkSslConfig(this.options.getUrl(), keyStoreLoader);
-        this.qos = MqttUtils.qosFromInt(this.options.getQos());
-    }
-
-    public void publish(MqttMessage message) throws Exception {
-        this.connection.publish(message.getTopic(), message.getMessage(), this.qos, this.retain);
-    }
-
-    public void connectMqtt(String clientId) throws Exception {
-        MQTT client = MqttUtils.configureClient(this.options, clientId, this.keyStoreLoader);
-        this.connection = client.blockingConnection();
-        this.connection.connect();
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java
deleted file mode 100644
index 4ca0145..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.common;
-
-
-import org.apache.storm.mqtt.MqttLogger;
-import org.apache.storm.mqtt.ssl.KeyStoreLoader;
-import org.fusesource.mqtt.client.MQTT;
-import org.fusesource.mqtt.client.QoS;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.URI;
-
-public class MqttUtils {
-    private static final Logger LOG = LoggerFactory.getLogger(MqttUtils.class);
-
-    private MqttUtils(){}
-
-    public static QoS qosFromInt(int i){
-        QoS qos = null;
-        switch(i) {
-            case 0:
-                qos = QoS.AT_MOST_ONCE;
-                break;
-            case 1:
-                qos = QoS.AT_LEAST_ONCE;
-                break;
-            case 2:
-                qos = QoS.EXACTLY_ONCE;
-                break;
-            default:
-                throw new IllegalArgumentException(i + "is not a valid MQTT QoS.");
-        }
-        return qos;
-    }
-
-
-    public static MQTT configureClient(MqttOptions options, String clientId, KeyStoreLoader keyStoreLoader)
-            throws Exception{
-
-        MQTT client = new MQTT();
-        URI uri = URI.create(options.getUrl());
-
-        client.setHost(uri);
-        if(!uri.getScheme().toLowerCase().equals("tcp")){
-            client.setSslContext(SslUtils.sslContext(uri.getScheme(), keyStoreLoader));
-        }
-        client.setClientId(clientId);
-        LOG.info("MQTT ClientID: {}", client.getClientId().toString());
-        client.setCleanSession(options.isCleanConnection());
-
-        client.setReconnectDelay(options.getReconnectDelay());
-        client.setReconnectDelayMax(options.getReconnectDelayMax());
-        client.setReconnectBackOffMultiplier(options.getReconnectBackOffMultiplier());
-        client.setConnectAttemptsMax(options.getConnectAttemptsMax());
-        client.setReconnectAttemptsMax(options.getReconnectAttemptsMax());
-
-
-        client.setUserName(options.getUserName());
-        client.setPassword(options.getPassword());
-        client.setTracer(new MqttLogger());
-
-        if(options.getWillTopic() != null && options.getWillPayload() != null){
-            QoS qos = MqttUtils.qosFromInt(options.getWillQos());
-            client.setWillQos(qos);
-            client.setWillTopic(options.getWillTopic());
-            client.setWillMessage(options.getWillPayload());
-            client.setWillRetain(options.getWillRetain());
-        }
-        return client;
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/SslUtils.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/SslUtils.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/SslUtils.java
deleted file mode 100644
index 681fc1d..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/common/SslUtils.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.common;
-
-
-import org.apache.storm.mqtt.ssl.KeyStoreLoader;
-
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import java.net.URI;
-import java.security.KeyStore;
-
-public class SslUtils {
-    private SslUtils(){}
-
-    public static void checkSslConfig(String url, KeyStoreLoader loader){
-        URI uri = URI.create(url);
-        String scheme = uri.getScheme().toLowerCase();
-        if(!(scheme.equals("tcp") || scheme.startsWith("tls") || scheme.startsWith("ssl"))){
-            throw new IllegalArgumentException("Unrecognized URI scheme: " + scheme);
-        }
-        if(!scheme.equalsIgnoreCase("tcp") && loader == null){
-            throw new IllegalStateException("A TLS/SSL MQTT URL was specified, but no KeyStoreLoader configured. " +
-                    "A KeyStoreLoader implementation is required when using TLS/SSL.");
-        }
-    }
-
-    public static SSLContext sslContext(String scheme, KeyStoreLoader keyStoreLoader) throws Exception {
-        KeyStore ks = KeyStore.getInstance("JKS");
-        ks.load(keyStoreLoader.keyStoreInputStream(), keyStoreLoader.keyStorePassword().toCharArray());
-
-        KeyStore ts = KeyStore.getInstance("JKS");
-        ts.load(keyStoreLoader.trustStoreInputStream(), keyStoreLoader.trustStorePassword().toCharArray());
-
-        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
-        kmf.init(ks, keyStoreLoader.keyPassword().toCharArray());
-
-        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
-        tmf.init(ts);
-
-        SSLContext sc = SSLContext.getInstance(scheme.toUpperCase());
-        TrustManager[] trustManagers = tmf.getTrustManagers();
-        sc.init(kmf.getKeyManagers(), trustManagers, null);
-
-        return sc;
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java
deleted file mode 100644
index a19fce4..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.mappers;
-
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.mqtt.MqttMessage;
-import org.apache.storm.mqtt.MqttMessageMapper;
-
-
-public class ByteArrayMessageMapper implements MqttMessageMapper {
-    public Values toValues(MqttMessage message) {
-        return new Values(message.getTopic(), message.getMessage());
-    }
-
-    public Fields outputFields() {
-        return new Fields("topic", "message");
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java
deleted file mode 100644
index e5f309b..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.mappers;
-
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.mqtt.MqttMessage;
-import org.apache.storm.mqtt.MqttMessageMapper;
-
-/**
- * Given a String topic and byte[] message, emits a tuple with fields
- * "topic" and "message", both of which are Strings.
- */
-public class StringMessageMapper implements MqttMessageMapper {
-    public Values toValues(MqttMessage message) {
-        return new Values(message.getTopic(), new String(message.getMessage()));
-    }
-
-    public Fields outputFields() {
-        return new Fields("topic", "message");
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java
deleted file mode 100644
index 08348c9..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.spout;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.storm.mqtt.MqttMessage;
-
-/**
- * Represents an MQTT Message consisting of a topic string (e.g. "/users/ptgoetz/office/thermostat")
- * and a byte array message/payload.
- *
- */
-class AckableMessage {
-    private String topic;
-    private byte[] message;
-    private Runnable ack;
-
-    AckableMessage(String topic, byte[] message, Runnable ack){
-        this.topic = topic;
-        this.message = message;
-        this.ack = ack;
-    }
-
-    public MqttMessage getMessage(){
-        return new MqttMessage(this.topic, this.message);
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder(71, 123)
-                .append(this.topic)
-                .append(this.message)
-                .toHashCode();
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) { return false; }
-        if (obj == this) { return true; }
-        if (obj.getClass() != getClass()) {
-            return false;
-        }
-        AckableMessage tm = (AckableMessage)obj;
-        return new EqualsBuilder()
-                .appendSuper(super.equals(obj))
-                .append(this.topic, tm.topic)
-                .append(this.message, tm.message)
-                .isEquals();
-    }
-
-    Runnable ack(){
-        return this.ack;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java
deleted file mode 100644
index 7f10cc5..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.spout;
-
-import org.apache.storm.Config;
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.IRichSpout;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.mqtt.MqttMessageMapper;
-import org.apache.storm.mqtt.common.MqttOptions;
-import org.apache.storm.mqtt.common.MqttUtils;
-import org.apache.storm.mqtt.common.SslUtils;
-import org.apache.storm.mqtt.ssl.KeyStoreLoader;
-import org.fusesource.hawtbuf.Buffer;
-import org.fusesource.hawtbuf.UTF8Buffer;
-import org.fusesource.mqtt.client.Callback;
-import org.fusesource.mqtt.client.CallbackConnection;
-import org.fusesource.mqtt.client.Listener;
-import org.fusesource.mqtt.client.MQTT;
-import org.fusesource.mqtt.client.QoS;
-import org.fusesource.mqtt.client.Topic;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.LinkedBlockingQueue;
-
-public class MqttSpout implements IRichSpout, Listener {
-    private static final Logger LOG = LoggerFactory.getLogger(MqttSpout.class);
-
-    private String topologyName;
-
-
-    private CallbackConnection connection;
-
-    protected transient SpoutOutputCollector collector;
-    protected transient TopologyContext context;
-    protected transient LinkedBlockingQueue<AckableMessage> incoming;
-    protected transient HashMap<Long, AckableMessage> pending;
-    private transient Map conf;
-    protected MqttMessageMapper type;
-    protected MqttOptions options;
-    protected KeyStoreLoader keyStoreLoader;
-
-    private boolean mqttConnected = false;
-    private boolean mqttConnectFailed = false;
-
-
-    private Long sequence = Long.MIN_VALUE;
-
-    private Long nextId(){
-        this.sequence++;
-        if(this.sequence == Long.MAX_VALUE){
-            this.sequence = Long.MIN_VALUE;
-        }
-        return this.sequence;
-    }
-
-    protected MqttSpout(){}
-
-    public MqttSpout(MqttMessageMapper type, MqttOptions options){
-        this(type, options, null);
-    }
-
-    public MqttSpout(MqttMessageMapper type, MqttOptions options, KeyStoreLoader keyStoreLoader){
-        this.type = type;
-        this.options = options;
-        this.keyStoreLoader = keyStoreLoader;
-        SslUtils.checkSslConfig(this.options.getUrl(), this.keyStoreLoader);
-    }
-
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(this.type.outputFields());
-    }
-
-    public Map<String, Object> getComponentConfiguration() {
-        return null;
-    }
-
-    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-        this.topologyName = (String)conf.get(Config.TOPOLOGY_NAME);
-
-        this.collector = collector;
-        this.context = context;
-        this.conf = conf;
-
-        this.incoming = new LinkedBlockingQueue<>();
-        this.pending = new HashMap<>();
-
-        try {
-            connectMqtt();
-        } catch (Exception e) {
-            this.collector.reportError(e);
-            throw new RuntimeException("MQTT Connection failed.", e);
-        }
-
-    }
-
-    private void connectMqtt() throws Exception {
-        String clientId = this.topologyName + "-" + this.context.getThisComponentId() + "-" +
-                this.context.getThisTaskId();
-
-        MQTT client = MqttUtils.configureClient(this.options, clientId, this.keyStoreLoader);
-        this.connection = client.callbackConnection();
-        this.connection.listener(this);
-        this.connection.connect(new ConnectCallback());
-
-        while(!this.mqttConnected && !this.mqttConnectFailed){
-            LOG.info("Waiting for connection...");
-            Thread.sleep(500);
-        }
-
-        if(this.mqttConnected){
-            List<String> topicList = this.options.getTopics();
-            Topic[] topics = new Topic[topicList.size()];
-            QoS qos = MqttUtils.qosFromInt(this.options.getQos());
-            for(int i = 0;i < topicList.size();i++){
-                topics[i] = new Topic(topicList.get(i), qos);
-            }
-            connection.subscribe(topics, new SubscribeCallback());
-        }
-    }
-
-
-
-    public void close() {
-        this.connection.disconnect(new DisconnectCallback());
-    }
-
-    public void activate() {
-    }
-
-    public void deactivate() {
-    }
-
-    /**
-     * When this method is called, Storm is requesting that the Spout emit tuples to the
-     * output collector. This method should be non-blocking, so if the Spout has no tuples
-     * to emit, this method should return. nextTuple, ack, and fail are all called in a tight
-     * loop in a single thread in the spout task. When there are no tuples to emit, it is courteous
-     * to have nextTuple sleep for a short amount of time (like a single millisecond)
-     * so as not to waste too much CPU.
-     */
-    public void nextTuple() {
-        AckableMessage tm = this.incoming.poll();
-        if(tm != null){
-            Long id = nextId();
-            this.collector.emit(this.type.toValues(tm.getMessage()), id);
-            this.pending.put(id, tm);
-        } else {
-            Thread.yield();
-        }
-
-    }
-
-    /**
-     * Storm has determined that the tuple emitted by this spout with the msgId identifier
-     * has been fully processed. Typically, an implementation of this method will take that
-     * message off the queue and prevent it from being replayed.
-     *
-     * @param msgId
-     */
-    public void ack(Object msgId) {
-        AckableMessage msg = this.pending.remove(msgId);
-        this.connection.getDispatchQueue().execute(msg.ack());
-    }
-
-    /**
-     * The tuple emitted by this spout with the msgId identifier has failed to be
-     * fully processed. Typically, an implementation of this method will put that
-     * message back on the queue to be replayed at a later time.
-     *
-     * @param msgId
-     */
-    public void fail(Object msgId) {
-        try {
-            this.incoming.put(this.pending.remove(msgId));
-        } catch (InterruptedException e) {
-            LOG.warn("Interrupted while re-queueing message.", e);
-        }
-    }
-
-
-    // ################# Listener Implementation ######################
-    public void onConnected() {
-        // this gets called repeatedly for no apparent reason, don't do anything
-    }
-
-    public void onDisconnected() {
-        // this gets called repeatedly for no apparent reason, don't do anything
-    }
-
-    public void onPublish(UTF8Buffer topic, Buffer payload, Runnable ack) {
-        LOG.debug("Received message: topic={}, payload={}", topic.toString(), new String(payload.toByteArray()));
-        try {
-            this.incoming.put(new AckableMessage(topic.toString(), payload.toByteArray(), ack));
-        } catch (InterruptedException e) {
-            LOG.warn("Interrupted while queueing an MQTT message.");
-        }
-    }
-
-    public void onFailure(Throwable throwable) {
-        LOG.error("MQTT Connection Failure.", throwable);
-        MqttSpout.this.connection.disconnect(new DisconnectCallback());
-        throw new RuntimeException("MQTT Connection failure.", throwable);
-    }
-
-    // ################# Connect Callback Implementation ######################
-    private class ConnectCallback implements Callback<Void> {
-        public void onSuccess(Void v) {
-            LOG.info("MQTT Connected. Subscribing to topic...");
-            MqttSpout.this.mqttConnected = true;
-        }
-
-        public void onFailure(Throwable throwable) {
-            LOG.info("MQTT Connection failed.");
-            MqttSpout.this.mqttConnectFailed = true;
-        }
-    }
-
-    // ################# Subscribe Callback Implementation ######################
-    private class SubscribeCallback implements Callback<byte[]>{
-        public void onSuccess(byte[] qos) {
-            LOG.info("Subscripton sucessful.");
-        }
-
-        public void onFailure(Throwable throwable) {
-            LOG.error("MQTT Subscripton failed.", throwable);
-            throw new RuntimeException("MQTT Subscribe failed.", throwable);
-        }
-    }
-
-    // ################# Subscribe Callback Implementation ######################
-    private class DisconnectCallback implements Callback<Void>{
-        public void onSuccess(Void aVoid) {
-            LOG.info("MQTT Disconnect successful.");
-        }
-
-        public void onFailure(Throwable throwable) {
-            // Disconnects don't fail.
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java
deleted file mode 100644
index 8bca407..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.ssl;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-/**
- * KeyStoreLoader implementation that uses local files.
- */
-public class DefaultKeyStoreLoader implements KeyStoreLoader {
-    private String ksFile = null;
-    private String tsFile = null;
-    private String keyStorePassword = "";
-    private String trustStorePassword = "";
-    private String keyPassword = "";
-
-    /**
-     * Creates a DefaultKeystoreLoader that uses the same file
-     * for both the keystore and truststore.
-     *
-     * @param keystore path to keystore file
-     */
-    public DefaultKeyStoreLoader(String keystore){
-        this.ksFile = keystore;
-    }
-
-    /**
-     * Creates a DefaultKeystoreLoader that uses separate files
-     * for the keystore and truststore.
-     *
-     * @param keystore path to keystore file
-     * @param truststore path to truststore file
-     */
-    public DefaultKeyStoreLoader(String keystore, String truststore){
-        this.ksFile = keystore;
-        this.tsFile = truststore;
-    }
-
-    public void setKeyStorePassword(String keyStorePassword) {
-        this.keyStorePassword = keyStorePassword;
-    }
-
-    public void setTrustStorePassword(String trustStorePassword) {
-        this.trustStorePassword = trustStorePassword;
-    }
-
-    public void setKeyPassword(String keyPassword) {
-        this.keyPassword = keyPassword;
-    }
-
-    @Override
-    public InputStream keyStoreInputStream() throws FileNotFoundException {
-        return new FileInputStream(this.ksFile);
-    }
-
-    @Override
-    public InputStream trustStoreInputStream() throws FileNotFoundException {
-        // if no truststore file, assume the truststore is the keystore.
-        if(this.tsFile == null){
-            return new FileInputStream(this.ksFile);
-        } else {
-            return new FileInputStream(this.tsFile);
-        }
-    }
-
-    @Override
-    public String keyStorePassword() {
-        return this.keyStorePassword;
-    }
-
-    @Override
-    public String trustStorePassword() {
-        return this.trustStorePassword;
-    }
-
-    @Override
-    public String keyPassword() {
-        return this.keyPassword;
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java
deleted file mode 100644
index 297efcc..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.ssl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-
-/**
- * Abstraction for loading keystore/truststore data. This allows keystores
- * to be loaded from different sources (File system, HDFS, etc.).
- */
-public interface KeyStoreLoader extends Serializable {
-
-    String keyStorePassword();
-    String trustStorePassword();
-    String keyPassword();
-    InputStream keyStoreInputStream() throws IOException;
-    InputStream trustStoreInputStream() throws IOException;
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java b/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java
deleted file mode 100644
index e53c983..0000000
--- a/external/storm-mqtt/core/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt.trident;
-
-import org.apache.storm.Config;
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.topology.FailedException;
-import org.apache.storm.mqtt.MqttMessage;
-import org.apache.storm.mqtt.common.MqttOptions;
-import org.apache.storm.mqtt.MqttTupleMapper;
-import org.apache.storm.mqtt.common.MqttPublisher;
-import org.apache.storm.mqtt.common.SslUtils;
-import org.apache.storm.mqtt.ssl.KeyStoreLoader;
-import org.apache.storm.trident.operation.BaseFunction;
-import org.apache.storm.trident.operation.TridentCollector;
-import org.apache.storm.trident.operation.TridentOperationContext;
-import org.apache.storm.trident.tuple.TridentTuple;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-import java.util.Map;
-
-public class MqttPublishFunction extends BaseFunction {
-    private static final Logger LOG = LoggerFactory.getLogger(MqttPublishFunction.class);
-    private MqttTupleMapper mapper;
-    private transient MqttPublisher publisher;
-    private boolean retain = false;
-    private transient OutputCollector collector;
-    private MqttOptions options;
-    private KeyStoreLoader keyStoreLoader;
-    private transient String topologyName;
-
-
-    public MqttPublishFunction(MqttOptions options, MqttTupleMapper mapper, KeyStoreLoader keyStoreLoader, boolean retain){
-        this.options = options;
-        this.mapper = mapper;
-        this.retain = retain;
-        this.keyStoreLoader = keyStoreLoader;
-        // the following code is duplicated in the constructor of MqttPublisher
-        // we reproduce it here so we fail on the client side if SSL is misconfigured, rather than when the topology
-        // is deployed to the cluster
-        SslUtils.checkSslConfig(this.options.getUrl(), keyStoreLoader);
-    }
-
-
-    @Override
-    public void prepare(Map conf, TridentOperationContext context) {
-        this.topologyName = (String)conf.get(Config.TOPOLOGY_NAME);
-        this.publisher = new MqttPublisher(this.options, this.keyStoreLoader, this.retain);
-        try {
-            this.publisher.connectMqtt(this.topologyName + "-" + context.getPartitionIndex());
-        } catch (Exception e) {
-            LOG.error("Unable to connect to MQTT Broker.", e);
-            throw new RuntimeException("Unable to connect to MQTT Broker.", e);
-        }
-    }
-
-    @Override
-    public void execute(TridentTuple tuple, TridentCollector collector) {
-        MqttMessage message = this.mapper.toMessage(tuple);
-        try {
-            this.publisher.publish(message);
-        } catch (Exception e) {
-            LOG.warn("Error publishing MQTT message. Failing tuple.", e);
-            // should we fail the batch or kill the worker?
-            throw new FailedException();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/core/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/core/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java b/external/storm-mqtt/core/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java
deleted file mode 100644
index 0dd4d73..0000000
--- a/external/storm-mqtt/core/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * 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 org.apache.storm.mqtt;
-
-import org.apache.storm.Config;
-import org.apache.storm.LocalCluster;
-import org.apache.storm.LocalCluster.LocalTopology;
-import org.apache.storm.generated.StormTopology;
-import org.apache.storm.testing.IntegrationTest;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.tuple.ITuple;
-import org.apache.activemq.broker.BrokerService;
-import org.apache.storm.mqtt.bolt.MqttBolt;
-import org.apache.storm.mqtt.common.MqttOptions;
-import org.apache.storm.mqtt.common.MqttPublisher;
-import org.apache.storm.mqtt.mappers.StringMessageMapper;
-import org.apache.storm.mqtt.spout.MqttSpout;
-import org.fusesource.mqtt.client.BlockingConnection;
-import org.fusesource.mqtt.client.MQTT;
-import org.fusesource.mqtt.client.Message;
-import org.fusesource.mqtt.client.QoS;
-import org.fusesource.mqtt.client.Topic;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.Serializable;
-import java.net.URI;
-import java.util.Arrays;
-
-@Category(IntegrationTest.class)
-public class StormMqttIntegrationTest implements Serializable{
-    private static final Logger LOG = LoggerFactory.getLogger(StormMqttIntegrationTest.class);
-    private static BrokerService broker;
-    static boolean spoutActivated = false;
-
-    private static final String TEST_TOPIC = "/mqtt-topology";
-    private static final String RESULT_TOPIC = "/integration-result";
-    private static final String RESULT_PAYLOAD = "Storm MQTT Spout";
-
-    public static class TestSpout extends MqttSpout{
-        public TestSpout(MqttMessageMapper type, MqttOptions options){
-            super(type, options);
-        }
-
-        @Override
-        public void activate() {
-            super.activate();
-            LOG.info("Spout activated.");
-            spoutActivated = true;
-        }
-    }
-
-
-    @AfterClass
-    public static void cleanup() throws Exception {
-        broker.stop();
-    }
-
-    @BeforeClass
-    public static void start() throws Exception {
-        LOG.warn("Starting broker...");
-        broker = new BrokerService();
-        broker.addConnector("mqtt://localhost:1883");
-        broker.setDataDirectory("target");
-        broker.start();
-        LOG.debug("MQTT broker started");
-    }
-
-
-    @Test
-    public void testMqttTopology() throws Exception {
-        MQTT client = new MQTT();
-        client.setTracer(new MqttLogger());
-        URI uri = URI.create("tcp://localhost:1883");
-        client.setHost(uri);
-
-        client.setClientId("MQTTSubscriber");
-        client.setCleanSession(false);
-        BlockingConnection connection = client.blockingConnection();
-        connection.connect();
-        Topic[] topics = {new Topic("/integration-result", QoS.AT_LEAST_ONCE)};
-        byte[] qoses = connection.subscribe(topics);
-
-        try (LocalCluster cluster = new LocalCluster();
-             LocalTopology topo = cluster.submitTopology("test", new Config(), buildMqttTopology());) {
-
-            LOG.info("topology started");
-            while(!spoutActivated) {
-                Thread.sleep(500);
-            }
-
-            // publish a retained message to the broker
-            MqttOptions options = new MqttOptions();
-            options.setCleanConnection(false);
-            MqttPublisher publisher = new MqttPublisher(options, true);
-            publisher.connectMqtt("MqttPublisher");
-            publisher.publish(new MqttMessage(TEST_TOPIC, "test".getBytes()));
-
-            LOG.info("published message");
-
-            Message message = connection.receive();
-            LOG.info("Message recieved on topic: {}", message.getTopic());
-            LOG.info("Payload: {}", new String(message.getPayload()));
-            message.ack();
-
-            Assert.assertArrayEquals(message.getPayload(), RESULT_PAYLOAD.getBytes());
-            Assert.assertEquals(message.getTopic(), RESULT_TOPIC);
-        }
-    }
-
-    public StormTopology buildMqttTopology(){
-        TopologyBuilder builder = new TopologyBuilder();
-
-        MqttOptions options = new MqttOptions();
-        options.setTopics(Arrays.asList(TEST_TOPIC));
-        options.setCleanConnection(false);
-        TestSpout spout = new TestSpout(new StringMessageMapper(), options);
-
-        MqttBolt bolt = new MqttBolt(options, new MqttTupleMapper() {
-            @Override
-            public MqttMessage toMessage(ITuple tuple) {
-                LOG.info("Received: {}", tuple);
-                return new MqttMessage(RESULT_TOPIC, RESULT_PAYLOAD.getBytes());
-            }
-        });
-
-        builder.setSpout("mqtt-spout", spout);
-        builder.setBolt("mqtt-bolt", bolt).shuffleGrouping("mqtt-spout");
-
-        return builder.createTopology();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/pom.xml b/external/storm-mqtt/pom.xml
index 7b870b2..37c19d7 100644
--- a/external/storm-mqtt/pom.xml
+++ b/external/storm-mqtt/pom.xml
@@ -14,44 +14,112 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>storm</artifactId>
-    <groupId>org.apache.storm</groupId>
-    <version>2.0.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-
-  <artifactId>storm-mqtt-parent</artifactId>
-  <packaging>pom</packaging>
-
-  <name>storm-mqtt-parent</name>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <!-- see comment below... This fixes an annoyance with intellij -->
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <!--
-            Hack to make intellij behave.
-            If you use intellij, enable this profile in your IDE.
-            It should make life easier.
-        -->
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
-  <modules>
-    <module>core</module>
-  </modules>
+    <artifactId>storm-mqtt</artifactId>
+    <packaging>jar</packaging>
+
+    <name>storm-mqtt</name>
+
+    <parent>
+        <groupId>org.apache.storm</groupId>
+        <artifactId>storm</artifactId>
+        <version>2.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+
+
+
+    <repositories>
+        <repository>
+            <id>bintray</id>
+            <url>http://dl.bintray.com/andsel/maven/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>activemq-broker</artifactId>
+            <version>5.9.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>activemq-mqtt</artifactId>
+            <version>5.9.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>activemq-kahadb-store</artifactId>
+            <version>5.9.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-core</artifactId>
+            <version>${project.version}</version>
+            <scope>${provided.scope}</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.fusesource.mqtt-client</groupId>
+            <artifactId>mqtt-client</artifactId>
+            <version>1.10</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.5</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <forkMode>perTest</forkMode>
+                    <enableAssertions>false</enableAssertions>
+                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                    <excludedGroups>${java.unit.test.exclude}</excludedGroups>
+                    <includes>
+                        <include>${java.unit.test.include}</include>
+                    </includes>
+                    <argLine>-Djava.net.preferIPv4Stack=true -Xmx1536m</argLine>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <version>${maven-surefire.version}</version>
+                <configuration>
+                    <forkMode>perTest</forkMode>
+                    <enableAssertions>false</enableAssertions>
+                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                    <includes>
+                        <include>${java.integration.test.include}</include>
+                    </includes>
+                    <groups>${java.integration.test.group}</groups>  <!--set in integration-test the profile-->
+                    <argLine>-Djava.net.preferIPv4Stack=true -Xmx1536m</argLine>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttLogger.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttLogger.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttLogger.java
new file mode 100644
index 0000000..3af73fd
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttLogger.java
@@ -0,0 +1,36 @@
+/**
+ * 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 org.apache.storm.mqtt;
+
+import org.fusesource.mqtt.client.Tracer;
+import org.fusesource.mqtt.codec.MQTTFrame;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Wrapper around SLF4J logger that allows MQTT messages to be logged.
+ */
+public class MqttLogger extends Tracer {
+    private static final Logger LOG = LoggerFactory.getLogger(MqttLogger.class);
+
+    @Override
+    public void debug(String message, Object... args) {
+        LOG.debug(String.format(message, args));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessage.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessage.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessage.java
new file mode 100644
index 0000000..5436dda
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessage.java
@@ -0,0 +1,41 @@
+/**
+ * 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 org.apache.storm.mqtt;
+
+/**
+ * Represents an MQTT Message consisting of a topic string (e.g. "/users/ptgoetz/office/thermostat")
+ * and a byte array message/payload.
+ *
+ */
+public class MqttMessage {
+    private String topic;
+    private byte[] message;
+
+
+    public MqttMessage(String topic, byte[] payload){
+        this.topic = topic;
+        this.message = payload;
+    }
+    public byte[] getMessage(){
+        return this.message;
+    }
+
+    public String getTopic(){
+        return this.topic;
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java
new file mode 100644
index 0000000..c6173f4
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttMessageMapper.java
@@ -0,0 +1,44 @@
+/**
+ * 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 org.apache.storm.mqtt;
+
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+
+import java.io.Serializable;
+
+/**
+ * Represents an object that can be converted to a Storm Tuple from an AckableMessage,
+ * given a MQTT Topic Name and a byte array payload.
+ */
+public interface MqttMessageMapper extends Serializable {
+    /**
+     * Convert a `MqttMessage` to a set of Values that can be emitted as a Storm Tuple.
+     *
+     * @param message An MQTT Message.
+     * @return Values representing a Storm Tuple.
+     */
+    Values toValues(MqttMessage message);
+
+    /**
+     * Returns the list of output fields this Mapper produces.
+     *
+     * @return the list of output fields this mapper produces.
+     */
+    Fields outputFields();
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java
new file mode 100644
index 0000000..c46c069
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/MqttTupleMapper.java
@@ -0,0 +1,37 @@
+/**
+ * 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 org.apache.storm.mqtt;
+
+
+import org.apache.storm.tuple.ITuple;
+
+import java.io.Serializable;
+
+/**
+ * Given a Tuple, converts it to an MQTT message.
+ */
+public interface MqttTupleMapper extends Serializable{
+
+    /**
+     * Converts a Tuple to a MqttMessage
+     * @param tuple the incoming tuple
+     * @return the message to publish
+     */
+    MqttMessage toMessage(ITuple tuple);
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java
new file mode 100644
index 0000000..f6ca1bf
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/bolt/MqttBolt.java
@@ -0,0 +1,105 @@
+/**
+ * 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 org.apache.storm.mqtt.bolt;
+
+import org.apache.storm.Config;
+import org.apache.storm.mqtt.MqttMessage;
+import org.apache.storm.mqtt.common.MqttOptions;
+import org.apache.storm.mqtt.MqttTupleMapper;
+import org.apache.storm.mqtt.common.MqttPublisher;
+import org.apache.storm.mqtt.common.SslUtils;
+import org.apache.storm.mqtt.ssl.KeyStoreLoader;
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichBolt;
+import org.apache.storm.topology.base.BaseTickTupleAwareRichBolt;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.utils.TupleUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+
+public class MqttBolt extends BaseTickTupleAwareRichBolt {
+    private static final Logger LOG = LoggerFactory.getLogger(MqttBolt.class);
+    private MqttTupleMapper mapper;
+    private transient MqttPublisher publisher;
+    private boolean retain = false;
+    private transient OutputCollector collector;
+    private MqttOptions options;
+    private KeyStoreLoader keyStoreLoader;
+    private transient String topologyName;
+
+
+    public MqttBolt(MqttOptions options, MqttTupleMapper mapper){
+        this(options, mapper, null, false);
+    }
+
+    public MqttBolt(MqttOptions options, MqttTupleMapper mapper, boolean retain){
+        this(options, mapper, null, retain);
+    }
+
+    public MqttBolt(MqttOptions options, MqttTupleMapper mapper, KeyStoreLoader keyStoreLoader){
+        this(options, mapper, keyStoreLoader, false);
+    }
+
+    public MqttBolt(MqttOptions options, MqttTupleMapper mapper, KeyStoreLoader keyStoreLoader, boolean retain){
+        this.options = options;
+        this.mapper = mapper;
+        this.retain = retain;
+        this.keyStoreLoader = keyStoreLoader;
+        // the following code is duplicated in the constructor of MqttPublisher
+        // we reproduce it here so we fail on the client side if SSL is misconfigured, rather than when the topology
+        // is deployed to the cluster
+        SslUtils.checkSslConfig(this.options.getUrl(), keyStoreLoader);
+    }
+
+    @Override
+    public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
+        this.collector = collector;
+        this.topologyName = (String)conf.get(Config.TOPOLOGY_NAME);
+        this.publisher = new MqttPublisher(this.options, this.keyStoreLoader, this.retain);
+        try {
+            this.publisher.connectMqtt(this.topologyName + "-" + context.getThisComponentId() + "-" + context.getThisTaskId());
+        } catch (Exception e) {
+            LOG.error("Unable to connect to MQTT Broker.", e);
+            throw new RuntimeException("Unable to connect to MQTT Broker.", e);
+        }
+    }
+
+    @Override
+    protected void process(Tuple input) {
+        MqttMessage message = this.mapper.toMessage(input);
+        try {
+            this.publisher.publish(message);
+            this.collector.ack(input);
+        } catch (Exception e) {
+            LOG.warn("Error publishing MQTT message. Failing tuple.", e);
+            // should we fail the tuple or kill the worker?
+            collector.reportError(e);
+            collector.fail(input);
+        }
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        // this bolt does not emit tuples
+    }
+}


[07/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java
deleted file mode 100644
index d691e75..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/bolt/JmsBolt.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/**
- * 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 org.apache.storm.jms.bolt;
-
-import java.util.Map;
-
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-
-import org.apache.storm.topology.base.BaseRichBolt;
-import org.apache.storm.jms.JmsMessageProducer;
-import org.apache.storm.jms.JmsProvider;
-import org.apache.storm.topology.base.BaseTickTupleAwareRichBolt;
-import org.apache.storm.utils.TupleUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Tuple;
-
-/**
- * A JmsBolt receives <code>org.apache.storm.tuple.Tuple</code> objects from a Storm
- * topology and publishes JMS Messages to a destination (topic or queue).
- * <p>
- * To use a JmsBolt in a topology, the following must be supplied:
- * <ol>
- * <li>A <code>JmsProvider</code> implementation.</li>
- * <li>A <code>JmsMessageProducer</code> implementation.</li>
- * </ol>
- * The <code>JmsProvider</code> provides the JMS <code>javax.jms.ConnectionFactory</code>
- * and <code>javax.jms.Destination</code> objects requied to publish JMS messages.
- * <p>
- * The JmsBolt uses a <code>JmsMessageProducer</code> to translate
- * <code>org.apache.storm.tuple.Tuple</code> objects into
- * <code>javax.jms.Message</code> objects for publishing.
- * <p>
- * Both JmsProvider and JmsMessageProducer must be set, or the bolt will
- * fail upon deployment to a cluster.
- * <p>
- * The JmsBolt is typically an endpoint in a topology -- in other words
- * it does not emit any tuples.
- */
-public class JmsBolt extends BaseTickTupleAwareRichBolt {
-    private static Logger LOG = LoggerFactory.getLogger(JmsBolt.class);
-
-    private boolean autoAck = true;
-
-    // javax.jms objects
-    private Connection connection;
-    private Session session;
-    private MessageProducer messageProducer;
-
-    // JMS options
-    private boolean jmsTransactional = false;
-    private int jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
-
-
-    private JmsProvider jmsProvider;
-    private JmsMessageProducer producer;
-
-
-    private OutputCollector collector;
-
-    /**
-     * Set the JmsProvider used to connect to the JMS destination topic/queue
-     *
-     * @param provider
-     */
-    public void setJmsProvider(JmsProvider provider) {
-        this.jmsProvider = provider;
-    }
-
-    /**
-     * Set the JmsMessageProducer used to convert tuples
-     * into JMS messages.
-     *
-     * @param producer
-     */
-    public void setJmsMessageProducer(JmsMessageProducer producer) {
-        this.producer = producer;
-    }
-
-    /**
-     * Sets the JMS acknowledgement mode for JMS messages sent
-     * by this bolt.
-     * <p>
-     * Possible values:
-     * <ul>
-     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
-     * </ul>
-     *
-     * @param acknowledgeMode (constant defined in javax.jms.Session)
-     */
-    public void setJmsAcknowledgeMode(int acknowledgeMode) {
-        this.jmsAcknowledgeMode = acknowledgeMode;
-    }
-
-    /**
-     * Set the JMS transactional setting for the JMS session.
-     *
-     * @param transactional
-     */
-//	public void setJmsTransactional(boolean transactional){
-//		this.jmsTransactional = transactional;
-//	}
-
-    /**
-     * Sets whether or not tuples should be acknowledged by this
-     * bolt.
-     * <p>
-     *
-     * @param autoAck
-     */
-    public void setAutoAck(boolean autoAck) {
-        this.autoAck = autoAck;
-    }
-
-
-    /**
-     * Consumes a tuple and sends a JMS message.
-     * <p>
-     * If autoAck is true, the tuple will be acknowledged
-     * after the message is sent.
-     * <p>
-     * If JMS sending fails, the tuple will be failed.
-     */
-    @Override
-    protected void process(Tuple input) {
-        // write the tuple to a JMS destination...
-        LOG.debug("Tuple received. Sending JMS message.");
-
-        try {
-            Message msg = this.producer.toMessage(this.session, input);
-            if (msg != null) {
-                if (msg.getJMSDestination() != null) {
-                    this.messageProducer.send(msg.getJMSDestination(), msg);
-                } else {
-                    this.messageProducer.send(msg);
-                }
-            }
-            if (this.autoAck) {
-                LOG.debug("ACKing tuple: " + input);
-                this.collector.ack(input);
-            }
-        } catch (JMSException e) {
-            // failed to send the JMS message, fail the tuple fast
-            LOG.warn("Failing tuple: " + input);
-            LOG.warn("Exception: ", e);
-            this.collector.fail(input);
-        }
-    }
-
-    /**
-     * Releases JMS resources.
-     */
-    @Override
-    public void cleanup() {
-        try {
-            LOG.debug("Closing JMS connection.");
-            this.session.close();
-            this.connection.close();
-        } catch (JMSException e) {
-            LOG.warn("Error closing JMS connection.", e);
-        }
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-    }
-
-    /**
-     * Initializes JMS resources.
-     */
-    @Override
-    public void prepare(Map stormConf, TopologyContext context,
-                        OutputCollector collector) {
-        if (this.jmsProvider == null || this.producer == null) {
-            throw new IllegalStateException("JMS Provider and MessageProducer not set.");
-        }
-        this.collector = collector;
-        LOG.debug("Connecting JMS..");
-        try {
-            ConnectionFactory cf = this.jmsProvider.connectionFactory();
-            Destination dest = this.jmsProvider.destination();
-            this.connection = cf.createConnection();
-            this.session = connection.createSession(this.jmsTransactional,
-                    this.jmsAcknowledgeMode);
-            this.messageProducer = session.createProducer(dest);
-
-            connection.start();
-        } catch (Exception e) {
-            LOG.warn("Error creating JMS connection.", e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java
deleted file mode 100644
index b78a41e..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsMessageID.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 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 org.apache.storm.jms.spout;
-
-import java.io.Serializable;
-
-public class JmsMessageID implements Comparable<JmsMessageID>, Serializable {
-
-    private String jmsID;
-
-    private Long sequence;
-
-    public JmsMessageID(long sequence, String jmsID){
-        this.jmsID = jmsID;
-        this.sequence = sequence;
-    }
-
-
-    public String getJmsID(){
-        return this.jmsID;
-    }
-
-    @Override
-    public int compareTo(JmsMessageID jmsMessageID) {
-        return (int)(this.sequence - jmsMessageID.sequence);
-    }
-
-    @Override
-    public int hashCode() {
-        return this.sequence.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if(o instanceof JmsMessageID){
-            JmsMessageID id = (JmsMessageID)o;
-            return this.jmsID.equals(id.jmsID);
-        } else {
-            return false;
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsSpout.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsSpout.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsSpout.java
deleted file mode 100644
index 6aaa7c9..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/spout/JmsSpout.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/**
- * 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 org.apache.storm.jms.spout;
-
-import java.io.Serializable;
-import java.util.*;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.Session;
-
-import org.apache.storm.topology.base.BaseRichSpout;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.storm.jms.JmsProvider;
-import org.apache.storm.jms.JmsTupleProducer;
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.utils.Utils;
-
-/**
- * A Storm <code>Spout</code> implementation that listens to a JMS topic or queue
- * and outputs tuples based on the messages it receives.
- * <p>
- * <code>JmsSpout</code> instances rely on <code>JmsProducer</code> implementations
- * to obtain the JMS <code>ConnectionFactory</code> and <code>Destination</code> objects
- * necessary to connect to a JMS topic/queue.
- * <p>
- * When a <code>JmsSpout</code> receives a JMS message, it delegates to an
- * internal <code>JmsTupleProducer</code> instance to create a Storm tuple from the
- * incoming message.
- * <p>
- * Typically, developers will supply a custom <code>JmsTupleProducer</code> implementation
- * appropriate for the expected message content.
- */
-@SuppressWarnings("serial")
-public class JmsSpout extends BaseRichSpout implements MessageListener {
-    private static final Logger LOG = LoggerFactory.getLogger(JmsSpout.class);
-
-    // JMS options
-    private int jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
-
-    private boolean distributed = true;
-
-    private JmsTupleProducer tupleProducer;
-
-    private JmsProvider jmsProvider;
-
-    private LinkedBlockingQueue<Message> queue;
-    private TreeSet<JmsMessageID> toCommit;
-    private HashMap<JmsMessageID, Message> pendingMessages;
-    private long messageSequence = 0;
-
-    private SpoutOutputCollector collector;
-
-    private transient Connection connection;
-    private transient Session session;
-
-    private boolean hasFailures = false;
-    public final Serializable recoveryMutex = "RECOVERY_MUTEX";
-    private Timer recoveryTimer = null;
-    private long recoveryPeriod = -1; // default to disabled
-
-    /**
-     * Sets the JMS Session acknowledgement mode for the JMS seesion associated with this spout.
-     * <p>
-     * Possible values:
-     * <ul>
-     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
-     * </ul>
-     *
-     * @param mode JMS Session Acknowledgement mode
-     * @throws IllegalArgumentException if the mode is not recognized.
-     */
-    public void setJmsAcknowledgeMode(int mode) {
-        switch (mode) {
-            case Session.AUTO_ACKNOWLEDGE:
-            case Session.CLIENT_ACKNOWLEDGE:
-            case Session.DUPS_OK_ACKNOWLEDGE:
-                break;
-            default:
-                throw new IllegalArgumentException("Unknown Acknowledge mode: " + mode + " (See javax.jms.Session for valid values)");
-
-        }
-        this.jmsAcknowledgeMode = mode;
-    }
-
-    /**
-     * Returns the JMS Session acknowledgement mode for the JMS seesion associated with this spout.
-     *
-     * @return
-     */
-    public int getJmsAcknowledgeMode() {
-        return this.jmsAcknowledgeMode;
-    }
-
-    /**
-     * Set the <code>JmsProvider</code>
-     * implementation that this Spout will use to connect to
-     * a JMS <code>javax.jms.Desination</code>
-     *
-     * @param provider
-     */
-    public void setJmsProvider(JmsProvider provider) {
-        this.jmsProvider = provider;
-    }
-
-    /**
-     * Set the <code>JmsTupleProducer</code>
-     * implementation that will convert <code>javax.jms.Message</code>
-     * object to <code>org.apache.storm.tuple.Values</code> objects
-     * to be emitted.
-     *
-     * @param producer
-     */
-    public void setJmsTupleProducer(JmsTupleProducer producer) {
-        this.tupleProducer = producer;
-    }
-
-    /**
-     * <code>javax.jms.MessageListener</code> implementation.
-     * <p>
-     * Stored the JMS message in an internal queue for processing
-     * by the <code>nextTuple()</code> method.
-     */
-    public void onMessage(Message msg) {
-        try {
-            LOG.debug("Queuing msg [" + msg.getJMSMessageID() + "]");
-        } catch (JMSException e) {
-        }
-        this.queue.offer(msg);
-    }
-
-    /**
-     * <code>ISpout</code> implementation.
-     * <p>
-     * Connects the JMS spout to the configured JMS destination
-     * topic/queue.
-     */
-    @SuppressWarnings("rawtypes")
-    public void open(Map conf, TopologyContext context,
-                     SpoutOutputCollector collector) {
-        if (this.jmsProvider == null) {
-            throw new IllegalStateException("JMS provider has not been set.");
-        }
-        if (this.tupleProducer == null) {
-            throw new IllegalStateException("JMS Tuple Producer has not been set.");
-        }
-        Integer topologyTimeout = (Integer) conf.get("topology.message.timeout.secs");
-        // TODO fine a way to get the default timeout from storm, so we're not hard-coding to 30 seconds (it could change)
-        topologyTimeout = topologyTimeout == null ? 30 : topologyTimeout;
-        if ((topologyTimeout.intValue() * 1000) > this.recoveryPeriod) {
-            LOG.warn("*** WARNING *** : " +
-                    "Recovery period (" + this.recoveryPeriod + " ms.) is less then the configured " +
-                    "'topology.message.timeout.secs' of " + topologyTimeout +
-                    " secs. This could lead to a message replay flood!");
-        }
-        this.queue = new LinkedBlockingQueue<Message>();
-        this.toCommit = new TreeSet<JmsMessageID>();
-        this.pendingMessages = new HashMap<JmsMessageID, Message>();
-        this.collector = collector;
-        try {
-            ConnectionFactory cf = this.jmsProvider.connectionFactory();
-            Destination dest = this.jmsProvider.destination();
-            this.connection = cf.createConnection();
-            this.session = connection.createSession(false,
-                    this.jmsAcknowledgeMode);
-            MessageConsumer consumer = session.createConsumer(dest);
-            consumer.setMessageListener(this);
-            this.connection.start();
-            if (this.isDurableSubscription() && this.recoveryPeriod > 0) {
-                this.recoveryTimer = new Timer();
-                this.recoveryTimer.scheduleAtFixedRate(new RecoveryTask(), 10, this.recoveryPeriod);
-            }
-
-        } catch (Exception e) {
-            LOG.warn("Error creating JMS connection.", e);
-        }
-
-    }
-
-    public void close() {
-        try {
-            LOG.debug("Closing JMS connection.");
-            this.session.close();
-            this.connection.close();
-        } catch (JMSException e) {
-            LOG.warn("Error closing JMS connection.", e);
-        }
-
-    }
-
-    public void nextTuple() {
-        Message msg = this.queue.poll();
-        if (msg == null) {
-            Utils.sleep(50);
-        } else {
-
-            LOG.debug("sending tuple: " + msg);
-            // get the tuple from the handler
-            try {
-                Values vals = this.tupleProducer.toTuple(msg);
-                // ack if we're not in AUTO_ACKNOWLEDGE mode, or the message requests ACKNOWLEDGE
-                LOG.debug("Requested deliveryMode: " + toDeliveryModeString(msg.getJMSDeliveryMode()));
-                LOG.debug("Our deliveryMode: " + toDeliveryModeString(this.jmsAcknowledgeMode));
-                if (this.isDurableSubscription()) {
-                    LOG.debug("Requesting acks.");
-                    JmsMessageID messageId = new JmsMessageID(this.messageSequence++, msg.getJMSMessageID());
-                    this.collector.emit(vals, messageId);
-
-                    // at this point we successfully emitted. Store
-                    // the message and message ID so we can do a
-                    // JMS acknowledge later
-                    this.pendingMessages.put(messageId, msg);
-                    this.toCommit.add(messageId);
-                } else {
-                    this.collector.emit(vals);
-                }
-            } catch (JMSException e) {
-                LOG.warn("Unable to convert JMS message: " + msg);
-            }
-
-        }
-
-    }
-
-    /*
-     * Will only be called if we're transactional or not AUTO_ACKNOWLEDGE
-     */
-    public void ack(Object msgId) {
-
-        Message msg = this.pendingMessages.remove(msgId);
-        JmsMessageID oldest = this.toCommit.first();
-        if (msgId.equals(oldest)) {
-            if (msg != null) {
-                try {
-                    LOG.debug("Committing...");
-                    msg.acknowledge();
-                    LOG.debug("JMS Message acked: " + msgId);
-                    this.toCommit.remove(msgId);
-                } catch (JMSException e) {
-                    LOG.warn("Error acknowldging JMS message: " + msgId, e);
-                }
-            } else {
-                LOG.warn("Couldn't acknowledge unknown JMS message ID: " + msgId);
-            }
-        } else {
-            this.toCommit.remove(msgId);
-        }
-
-    }
-
-    /*
-     * Will only be called if we're transactional or not AUTO_ACKNOWLEDGE
-     */
-    public void fail(Object msgId) {
-        LOG.warn("Message failed: " + msgId);
-        this.pendingMessages.clear();
-        this.toCommit.clear();
-        synchronized (this.recoveryMutex) {
-            this.hasFailures = true;
-        }
-    }
-
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        this.tupleProducer.declareOutputFields(declarer);
-
-    }
-
-    /**
-     * Returns <code>true</code> if the spout has received failures
-     * from which it has not yet recovered.
-     */
-    public boolean hasFailures() {
-        return this.hasFailures;
-    }
-
-    protected void recovered() {
-        this.hasFailures = false;
-    }
-
-    /**
-     * Sets the periodicity of the timer task that
-     * checks for failures and recovers the JMS session.
-     *
-     * @param period
-     */
-    public void setRecoveryPeriod(long period) {
-        this.recoveryPeriod = period;
-    }
-
-    public boolean isDistributed() {
-        return this.distributed;
-    }
-
-    /**
-     * Sets the "distributed" mode of this spout.
-     * <p>
-     * If <code>true</code> multiple instances of this spout <i>may</i> be
-     * created across the cluster (depending on the "parallelism_hint" in the topology configuration).
-     * <p>
-     * Setting this value to <code>false</code> essentially means this spout will run as a singleton
-     * within the cluster ("parallelism_hint" will be ignored).
-     * <p>
-     * In general, this should be set to <code>false</code> if the underlying JMS destination is a
-     * topic, and <code>true</code> if it is a JMS queue.
-     *
-     * @param distributed
-     */
-    public void setDistributed(boolean distributed) {
-        this.distributed = distributed;
-    }
-
-
-    private static final String toDeliveryModeString(int deliveryMode) {
-        switch (deliveryMode) {
-            case Session.AUTO_ACKNOWLEDGE:
-                return "AUTO_ACKNOWLEDGE";
-            case Session.CLIENT_ACKNOWLEDGE:
-                return "CLIENT_ACKNOWLEDGE";
-            case Session.DUPS_OK_ACKNOWLEDGE:
-                return "DUPS_OK_ACKNOWLEDGE";
-            default:
-                return "UNKNOWN";
-
-        }
-    }
-
-    protected Session getSession() {
-        return this.session;
-    }
-
-    private boolean isDurableSubscription() {
-        return (this.jmsAcknowledgeMode != Session.AUTO_ACKNOWLEDGE);
-    }
-
-
-    private class RecoveryTask extends TimerTask {
-        private final Logger LOG = LoggerFactory.getLogger(RecoveryTask.class);
-
-        public void run() {
-            synchronized (JmsSpout.this.recoveryMutex) {
-                if (JmsSpout.this.hasFailures()) {
-                    try {
-                        LOG.info("Recovering from a message failure.");
-                        JmsSpout.this.getSession().recover();
-                        JmsSpout.this.recovered();
-                    } catch (JMSException e) {
-                        LOG.warn("Could not recover jms session.", e);
-                    }
-                }
-            }
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsBatch.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsBatch.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsBatch.java
deleted file mode 100644
index c990058..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsBatch.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 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 org.apache.storm.jms.trident;
-
-/**
- * Batch coordination metadata object for the TridentJmsSpout.
- * This implementation does not use batch metadata, so the object is empty.
- *
- */
-public class JmsBatch {
-    // Empty class
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsState.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsState.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsState.java
deleted file mode 100644
index bfb78b5..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsState.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * 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 org.apache.storm.jms.trident;
-
-import org.apache.storm.jms.JmsMessageProducer;
-import org.apache.storm.jms.JmsProvider;
-import org.apache.storm.topology.FailedException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.storm.trident.operation.TridentCollector;
-import org.apache.storm.trident.state.State;
-import org.apache.storm.trident.tuple.TridentTuple;
-
-import javax.jms.*;
-import java.io.Serializable;
-import java.lang.IllegalStateException;
-import java.util.List;
-
-public class JmsState implements State {
-
-    private static final Logger LOG = LoggerFactory.getLogger(JmsState.class);
-
-    private Options options;
-    private Connection connection;
-    private Session session;
-    private MessageProducer messageProducer;
-
-    protected JmsState(Options options) {
-        this.options = options;
-    }
-
-    public static class Options implements Serializable {
-        private JmsProvider jmsProvider;
-        private JmsMessageProducer msgProducer;
-        private int jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
-        private boolean jmsTransactional = true;
-
-        public Options withJmsProvider(JmsProvider provider) {
-            this.jmsProvider = provider;
-            return this;
-        }
-
-        public Options withMessageProducer(JmsMessageProducer msgProducer) {
-            this.msgProducer = msgProducer;
-            return this;
-        }
-
-        public Options withJmsAcknowledgeMode(int jmsAcknowledgeMode) {
-            this.jmsAcknowledgeMode = jmsAcknowledgeMode;
-            return this;
-        }
-
-        public Options withJmsTransactional(boolean jmsTransactional) {
-            this.jmsTransactional = jmsTransactional;
-            return this;
-        }
-    }
-
-    protected void prepare() {
-        if(this.options.jmsProvider == null || this.options.msgProducer == null){
-            throw new IllegalStateException("JMS Provider and MessageProducer not set.");
-        }
-        LOG.debug("Connecting JMS..");
-        try {
-            ConnectionFactory cf = this.options.jmsProvider.connectionFactory();
-            Destination dest = this.options.jmsProvider.destination();
-            this.connection = cf.createConnection();
-            this.session = connection.createSession(this.options.jmsTransactional,
-                    this.options.jmsAcknowledgeMode);
-            this.messageProducer = session.createProducer(dest);
-
-            connection.start();
-        } catch (Exception e) {
-            LOG.warn("Error creating JMS connection.", e);
-        }
-    }
-
-    @Override
-    public void beginCommit(Long aLong) {
-    }
-
-    @Override
-    public void commit(Long aLong) {
-        LOG.debug("Committing JMS transaction.");
-        if(this.options.jmsTransactional) {
-            try {
-                session.commit();
-            } catch(JMSException e){
-                LOG.error("JMS Session commit failed.", e);
-            }
-        }
-    }
-
-    public void updateState(List<TridentTuple> tuples, TridentCollector collector) throws JMSException {
-        try {
-        for(TridentTuple tuple : tuples) {
-                Message msg = this.options.msgProducer.toMessage(this.session, tuple);
-                if (msg != null) {
-                    if (msg.getJMSDestination() != null) {
-                        this.messageProducer.send(msg.getJMSDestination(), msg);
-                    } else {
-                        this.messageProducer.send(msg);
-                    }
-                }
-            }
-        } catch (JMSException e) {
-            LOG.warn("Failed to send jmd message for a trident batch ", e);
-            if(this.options.jmsTransactional) {
-                session.rollback();
-            }
-            throw new FailedException("Failed to write tuples", e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java
deleted file mode 100644
index 9a02ba9..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsStateFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 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 org.apache.storm.jms.trident;
-
-import org.apache.storm.task.IMetricsContext;
-import org.apache.storm.trident.state.State;
-import org.apache.storm.trident.state.StateFactory;
-
-import java.util.Map;
-
-public class JmsStateFactory implements StateFactory {
-
-    private JmsState.Options options;
-
-    public JmsStateFactory(JmsState.Options options) {
-        this.options = options;
-    }
-
-    @Override
-    public State makeState(Map map, IMetricsContext iMetricsContext, int partitionIndex, int numPartitions) {
-        JmsState state = new JmsState(options);
-        state.prepare();
-        return state;
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java
deleted file mode 100644
index a2709a4..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/JmsUpdater.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 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 org.apache.storm.jms.trident;
-
-import org.apache.storm.topology.FailedException;
-import org.apache.storm.trident.operation.TridentCollector;
-import org.apache.storm.trident.state.BaseStateUpdater;
-import org.apache.storm.trident.tuple.TridentTuple;
-
-import javax.jms.JMSException;
-import java.util.List;
-
-public class JmsUpdater extends BaseStateUpdater<JmsState>  {
-
-    @Override
-    public void updateState(JmsState jmsState, List<TridentTuple> tuples, TridentCollector collector) {
-        try {
-            jmsState.updateState(tuples, collector);
-        } catch (JMSException e) {
-            throw new FailedException("failed JMS opetation", e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java b/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java
deleted file mode 100644
index 55e29bc..0000000
--- a/external/storm-jms/core/src/main/java/org/apache/storm/jms/trident/TridentJmsSpout.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/**
- * 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 org.apache.storm.jms.trident;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.Session;
-
-import org.apache.storm.jms.JmsProvider;
-import org.apache.storm.jms.JmsTupleProducer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.storm.trident.operation.TridentCollector;
-import org.apache.storm.trident.spout.ITridentSpout;
-import org.apache.storm.trident.topology.TransactionAttempt;
-import org.apache.storm.Config;
-import org.apache.storm.generated.StreamInfo;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsGetter;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.utils.RotatingMap;
-import org.apache.storm.utils.Utils;
-
-/**
- * Trident implementation of the JmsSpout
- * <p>
- *
- */
-public class TridentJmsSpout implements ITridentSpout<JmsBatch> {
-
-    public static final String MAX_BATCH_SIZE_CONF = "topology.spout.max.batch.size";
-    
-    public static final int DEFAULT_BATCH_SIZE = 1000;
-
-    private static final long serialVersionUID = -3469351154693356655L;
-    
-    private JmsTupleProducer tupleProducer;
-
-    private JmsProvider jmsProvider;
-
-    private int jmsAcknowledgeMode;
-
-    private String name;
-
-    private static int nameIndex = 1;
-    
-    /**
-     * Create a TridentJmsSpout with a default name and acknowledge mode of AUTO_ACKNOWLEDGE
-     */
-    public TridentJmsSpout() {
-        this.name = "JmsSpout_"+(nameIndex++);
-        this.jmsAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
-    }
-    
-    /**
-     * Set the name for this spout, to improve log identification
-     * @param name The name to be used in log messages
-     * @return This spout
-     */
-    public TridentJmsSpout named(String name) {
-        this.name = name;
-        return this;
-    }
-    
-    /**
-     * Set the <code>JmsProvider</code>
-     * implementation that this Spout will use to connect to 
-     * a JMS <code>javax.jms.Desination</code>
-     * 
-     * @param provider
-     */
-    public TridentJmsSpout withJmsProvider(JmsProvider provider){
-        this.jmsProvider = provider;
-        return this;
-    }
-    
-    /**
-     * Set the <code>JmsTupleProducer</code>
-     * implementation that will convert <code>javax.jms.Message</code>
-     * object to <code>backtype.storm.tuple.Values</code> objects
-     * to be emitted.
-     * 
-     * @param tupleProducer
-     * @return This spout
-     */
-    public TridentJmsSpout withTupleProducer(JmsTupleProducer tupleProducer) {
-        this.tupleProducer = tupleProducer;
-        return this;
-    }
-    
-    /**
-     * Set the JMS acknowledge mode for messages being processed by this spout.
-     * <p/>
-     * Possible values:
-     * <ul>
-     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
-     * </ul>
-     * @param jmsAcknowledgeMode The chosen acknowledge mode
-     * @return This spout
-     * @throws IllegalArgumentException if the mode is not recognized
-     */
-    public TridentJmsSpout withJmsAcknowledgeMode(int jmsAcknowledgeMode) {
-        toDeliveryModeString(jmsAcknowledgeMode);
-        this.jmsAcknowledgeMode = jmsAcknowledgeMode;
-        return this;
-    }
-    
-    /**
-     * Return a friendly string for the given JMS acknowledge mode, or throw an IllegalArgumentException if
-     * the mode is not recognized.
-     * <p/>
-     * Possible values:
-     * <ul>
-     * <li>javax.jms.Session.AUTO_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.CLIENT_ACKNOWLEDGE</li>
-     * <li>javax.jms.Session.DUPS_OK_ACKNOWLEDGE</li>
-     * </ul>
-     * @param acknowledgeMode A valid JMS acknowledge mode
-     * @return A friendly string describing the acknowledge mode
-     * @throws IllegalArgumentException if the mode is not recognized
-     */
-    private static final String toDeliveryModeString(int acknowledgeMode) {
-        switch (acknowledgeMode) {
-        case Session.AUTO_ACKNOWLEDGE:
-            return "AUTO_ACKNOWLEDGE";
-        case Session.CLIENT_ACKNOWLEDGE:
-            return "CLIENT_ACKNOWLEDGE";
-        case Session.DUPS_OK_ACKNOWLEDGE:
-            return "DUPS_OK_ACKNOWLEDGE";
-        default:
-            throw new IllegalArgumentException("Unknown JMS Acknowledge mode " + acknowledgeMode + " (See javax.jms.Session for valid values)");
-        }
-    }
-    
-    @Override
-    public ITridentSpout.BatchCoordinator<JmsBatch> getCoordinator(
-            String txStateId, @SuppressWarnings("rawtypes") Map conf, TopologyContext context) {
-        return new JmsBatchCoordinator(name);
-    }
-
-    @Override
-    public Emitter<JmsBatch> getEmitter(String txStateId, @SuppressWarnings("rawtypes") Map conf, TopologyContext context) {
-        return new JmsEmitter(name, jmsProvider, tupleProducer, jmsAcknowledgeMode, conf);
-    }
-
-    @Override
-    public Map<String, Object> getComponentConfiguration() {
-        return null;
-    }
-
-    @Override
-    public Fields getOutputFields() {
-        OutputFieldsGetter fieldGetter = new OutputFieldsGetter();
-        tupleProducer.declareOutputFields(fieldGetter);
-        StreamInfo streamInfo = fieldGetter.getFieldsDeclaration().get(Utils.DEFAULT_STREAM_ID);
-        if (streamInfo == null) {
-            throw new IllegalArgumentException("Jms Tuple producer has not declared output fields for the default stream");
-        }
-        
-        return new Fields(streamInfo.get_output_fields());
-    }
-    
-    /**
-     * The JmsEmitter class listens for incoming messages and stores them in a blocking queue. On each invocation of emit,
-     * the queued messages are emitted as a batch.
-     *
-     */
-    private class JmsEmitter implements Emitter<JmsBatch>, MessageListener {
-
-        private final LinkedBlockingQueue<Message> queue;
-        private final Connection connection;
-        private final Session session;
-
-        private final RotatingMap<Long, List<Message>> batchMessageMap; // Maps transaction Ids to JMS message ids.
-        
-        private final long rotateTimeMillis;
-        private final int maxBatchSize;
-        private final String name;
-        
-        private long lastRotate;
-       
-        private final Logger LOG = LoggerFactory.getLogger(JmsEmitter.class);
- 
-        public JmsEmitter(String name, JmsProvider jmsProvider, JmsTupleProducer tupleProducer, int jmsAcknowledgeMode, @SuppressWarnings("rawtypes") Map conf) {
-            if (jmsProvider == null) {
-                throw new IllegalStateException("JMS provider has not been set.");
-            }
-            if (tupleProducer == null) {
-                throw new IllegalStateException("JMS Tuple Producer has not been set.");
-            }
-
-            this.queue = new LinkedBlockingQueue<Message>();
-            this.name = name;
-            
-            batchMessageMap = new RotatingMap<Long, List<Message>>(3);
-            rotateTimeMillis = 1000L * ((Number)conf.get(Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS)).intValue();
-            lastRotate = System.currentTimeMillis();
-            
-            Number batchSize = (Number) conf.get(MAX_BATCH_SIZE_CONF);
-            maxBatchSize = batchSize != null ? batchSize.intValue() : DEFAULT_BATCH_SIZE;
-
-            try {
-                ConnectionFactory cf = jmsProvider.connectionFactory();
-                Destination dest = jmsProvider.destination();
-                this.connection = cf.createConnection();
-                this.session = connection.createSession(false, jmsAcknowledgeMode);
-                MessageConsumer consumer = session.createConsumer(dest);
-                consumer.setMessageListener(this);
-                this.connection.start();
-
-                LOG.info("Created JmsEmitter with max batch size "+maxBatchSize+" rotate time "+rotateTimeMillis+"ms and destination "+dest+" for "+name);
-
-            } catch (Exception e) {
-                LOG.warn("Error creating JMS connection.", e);
-                throw new IllegalStateException("Could not create JMS connection for spout ", e);
-            }
-            
-        }
-        
-        @Override
-        public void success(TransactionAttempt tx) {
-            
-            @SuppressWarnings("unchecked")
-            List<Message> messages = (List<Message>) batchMessageMap.remove(tx.getTransactionId());
-            
-            if (messages != null) {
-                if (!messages.isEmpty()) {
-                    LOG.debug("Success for batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" for "+name);
-                }
-                
-                for (Message msg: messages) {
-                    String messageId = "UnknownId";
-                    
-                    try {
-                        messageId = msg.getJMSMessageID();
-                        msg.acknowledge();
-                        LOG.trace("Acknowledged message "+messageId);
-                    } catch (JMSException e) {
-                        LOG.warn("Failed to acknowledge message "+messageId, e);
-                    }
-                }
-            }
-            else {
-                LOG.warn("No messages found in batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId());
-            }
-        }
-
-        /**
-         * Fail a batch with the given transaction id. This is called when a batch is timed out, or a new batch with a 
-         * matching transaction id is emitted. Note that the current implementation does nothing - i.e. it discards 
-         * messages that have been failed.
-         * @param transactionId The transaction id of the failed batch
-         * @param messages The list of messages to fail.
-         */
-        private void fail(Long transactionId, List<Message> messages) {
-            LOG.debug("Failure for batch with transaction id "+transactionId+" for "+name);
-            if (messages != null) {
-                for (Message msg: messages) {
-                    try {
-                        LOG.trace("Failed message "+msg.getJMSMessageID());
-                    } catch (JMSException e) {
-                        LOG.warn("Could not identify failed message ", e);
-                    }
-                }
-            }
-            else {
-                LOG.warn("Failed batch has no messages with transaction id "+transactionId);
-            }            
-        }
-
-        @Override
-        public void close() {
-            try {
-                LOG.info("Closing JMS connection.");
-                this.session.close();
-                this.connection.close();
-            } catch (JMSException e) {
-                LOG.warn("Error closing JMS connection.", e);
-            }   
-        }
-
-        @Override
-        public void emitBatch(TransactionAttempt tx, JmsBatch coordinatorMeta,
-                TridentCollector collector) {
-            
-            long now = System.currentTimeMillis();
-            if(now - lastRotate > rotateTimeMillis) {
-                Map<Long, List<Message>> failed = batchMessageMap.rotate();
-                for(Long id: failed.keySet()) {
-                    LOG.warn("TIMED OUT batch with transaction id "+id+" for "+name);
-                    fail(id, failed.get(id));
-                }
-                lastRotate = now;
-            }
-            
-            if(batchMessageMap.containsKey(tx.getTransactionId())) {
-                LOG.warn("FAILED duplicate batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" for "+name);
-                fail(tx.getTransactionId(), batchMessageMap.get(tx.getTransactionId()));
-            }
-            
-            List<Message> batchMessages = new ArrayList<Message>();
-            
-            for (int index=0; index<maxBatchSize; index++) {
-                Message msg = queue.poll();
-                if (msg == null) {
-                    Utils.sleep(50); // Back off
-                    break;
-                }
-                
-                try {
-                    if (TridentJmsSpout.this.jmsAcknowledgeMode != Session.AUTO_ACKNOWLEDGE) {
-                        batchMessages.add(msg);
-                    }
-                    Values tuple = tupleProducer.toTuple(msg);
-                    collector.emit(tuple);
-                } catch (JMSException e) {
-                    LOG.warn("Failed to emit message, could not retrieve data for "+name+": "+e );
-                }
-            }
-            
-            if (!batchMessages.isEmpty()) {
-                LOG.debug("Emitting batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" and size "+batchMessages.size()+" for "+name);
-            }
-            else {
-                LOG.trace("No items to acknowledge for batch with transaction id "+tx.getTransactionId()+"/"+tx.getAttemptId()+" for "+name);
-            }
-            batchMessageMap.put(tx.getTransactionId(), batchMessages);
-        }
-
-        @Override
-        public void onMessage(Message msg) {
-            try {
-                LOG.trace("Queuing msg [" + msg.getJMSMessageID() + "]");
-            } catch (JMSException e) {
-                // Nothing here, could not get message id
-            }
-            this.queue.offer(msg);
-        }
-        
-    }
-    
-    /**
-     * Bare implementation of a BatchCoordinator, returning a null JmsBatch object
-     *
-     */
-    private class JmsBatchCoordinator implements BatchCoordinator<JmsBatch> {
-
-        private final String name;
-        
-        private final Logger LOG = LoggerFactory.getLogger(JmsBatchCoordinator.class);
-
-        public JmsBatchCoordinator(String name) {
-            this.name = name;
-            LOG.info("Created batch coordinator for "+name);
-        }
-        
-        @Override
-        public JmsBatch initializeTransaction(long txid, JmsBatch prevMetadata, JmsBatch curMetadata) {
-            LOG.debug("Initialise transaction "+txid+" for "+name);
-            return null;
-        }
-
-        @Override
-        public void success(long txid) {
-        }
-
-        @Override
-        public boolean isReady(long txid) {
-            return true;
-        }
-
-        @Override
-        public void close() {
-        }
-        
-    }
-
-}
-
-    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java b/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java
deleted file mode 100644
index e80f70a..0000000
--- a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/JmsSpoutTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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 org.apache.storm.jms.spout;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.util.HashMap;
-
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.storm.jms.JmsProvider;
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class JmsSpoutTest {
-    private static final Logger LOG = LoggerFactory.getLogger(JmsSpoutTest.class);
-
-    @Test
-    public void testFailure() throws JMSException, Exception{
-        JmsSpout spout = new JmsSpout();
-        JmsProvider mockProvider = new MockJmsProvider();
-        MockSpoutOutputCollector mockCollector = new MockSpoutOutputCollector();
-        SpoutOutputCollector collector = new SpoutOutputCollector(mockCollector);
-        spout.setJmsProvider(new MockJmsProvider());
-        spout.setJmsTupleProducer(new MockTupleProducer());
-        spout.setJmsAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
-        spout.setRecoveryPeriod(10); // Rapid recovery for testing.
-        spout.open(new HashMap<String,String>(), null, collector);
-        Message msg = this.sendMessage(mockProvider.connectionFactory(), mockProvider.destination());
-        Thread.sleep(100);
-        spout.nextTuple(); // Pretend to be storm.
-        Assert.assertTrue(mockCollector.emitted);
-        
-        mockCollector.reset();        
-        spout.fail(msg.getJMSMessageID()); // Mock failure
-        Thread.sleep(5000);
-        spout.nextTuple(); // Pretend to be storm.
-        Thread.sleep(5000);
-        Assert.assertTrue(mockCollector.emitted); // Should have been re-emitted
-    }
-
-    @Test
-    public void testSerializability() throws IOException{
-        JmsSpout spout = new JmsSpout();
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ObjectOutputStream oos = new ObjectOutputStream(out);
-        oos.writeObject(spout);
-        oos.close();
-        Assert.assertTrue(out.toByteArray().length > 0);
-    }
-    
-    public Message sendMessage(ConnectionFactory connectionFactory, Destination destination) throws JMSException {        
-        Session mySess = connectionFactory.createConnection().createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        MessageProducer producer = mySess.createProducer(destination);
-        TextMessage msg = mySess.createTextMessage();
-        msg.setText("Hello World");
-        LOG.info("Sending Message: {}", msg.getText());
-        producer.send(msg);
-        return msg;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java b/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java
deleted file mode 100644
index 3ba0853..0000000
--- a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockJmsProvider.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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 org.apache.storm.jms.spout;
-
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import org.apache.activemq.ActiveMQConnectionFactory;
-
-import org.apache.storm.jms.JmsProvider;
-
-public class MockJmsProvider implements JmsProvider {
-    private static final long serialVersionUID = 1L;
-
-    private ConnectionFactory connectionFactory = null;
-    private Destination destination = null;
-    
-    public MockJmsProvider() throws NamingException{
-        this.connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); 
-        Context jndiContext = new InitialContext();
-        this.destination = (Destination) jndiContext.lookup("dynamicQueues/FOO.BAR");        
-
-    }
-    
-    /**
-     * Provides the JMS <code>ConnectionFactory</code>
-     * @return the connection factory
-     * @throws Exception
-     */
-    public ConnectionFactory connectionFactory() throws Exception{
-        return this.connectionFactory;
-    }
-
-    /**
-     * Provides the <code>Destination</code> (topic or queue) from which the
-     * <code>JmsSpout</code> will receive messages.
-     * @return
-     * @throws Exception
-     */
-    public Destination destination() throws Exception{
-        return this.destination;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java b/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java
deleted file mode 100644
index a5a6c51..0000000
--- a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockSpoutOutputCollector.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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 org.apache.storm.jms.spout;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.storm.spout.ISpoutOutputCollector;
-
-public class MockSpoutOutputCollector implements ISpoutOutputCollector {
-    boolean emitted = false;
-
-    @Override
-    public List<Integer> emit(String streamId, List<Object> tuple, Object messageId) {
-        emitted = true;
-        return new ArrayList<Integer>();
-    }
-
-    @Override
-    public void emitDirect(int taskId, String streamId, List<Object> tuple, Object messageId) {
-        emitted = true;
-    }
-
-    @Override
-    public void reportError(Throwable error) {
-    }
-
-    public boolean emitted(){
-        return this.emitted;
-    }
-
-    public void reset(){
-        this.emitted = false;
-    }
-
-    @Override
-    public long getPendingCount() {
-        return 0;
-    }
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java b/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java
deleted file mode 100644
index ea571fc..0000000
--- a/external/storm-jms/core/src/test/java/org/apache/storm/jms/spout/MockTupleProducer.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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 org.apache.storm.jms.spout;
-
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.TextMessage;
-
-import org.apache.storm.jms.JmsTupleProducer;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-
-public class MockTupleProducer implements JmsTupleProducer {
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public Values toTuple(Message msg) throws JMSException {
-        if (msg instanceof TextMessage) {
-            String json = ((TextMessage) msg).getText();
-            return new Values(json);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        declarer.declare(new Fields("json"));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/core/src/test/resources/jndi.properties
----------------------------------------------------------------------
diff --git a/external/storm-jms/core/src/test/resources/jndi.properties b/external/storm-jms/core/src/test/resources/jndi.properties
deleted file mode 100644
index af19521..0000000
--- a/external/storm-jms/core/src/test/resources/jndi.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# 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.
-
-java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
-java.naming.provider.url = vm://localhost?broker.persistent=false
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/README.markdown
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/README.markdown b/external/storm-jms/examples/README.markdown
deleted file mode 100644
index 7a4d8f0..0000000
--- a/external/storm-jms/examples/README.markdown
+++ /dev/null
@@ -1,12 +0,0 @@
-## About Storm JMS Examples
-This project contains a simple storm topology that illustrates the usage of "storm-jms".
-
-To build:
-
-`mvn clean install`
-
-The default build will create a jar file that can be deployed to to a Storm cluster in the "target" directory:
-
-`storm-jms-examples-0.1-SNAPSHOT-jar-with-dependencies.jar`
-
-

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/pom.xml b/external/storm-jms/examples/pom.xml
deleted file mode 100644
index b099b88..0000000
--- a/external/storm-jms/examples/pom.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.storm</groupId>
-        <artifactId>storm-jms-parent</artifactId>
-        <version>2.0.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-
-    <artifactId>storm-jms-examples</artifactId>
-
-    <properties>
-        <spring.version>2.5.6</spring.version>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-jms</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.xbean</groupId>
-            <artifactId>xbean-spring</artifactId>
-            <version>3.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-core</artifactId>
-            <version>${project.version}</version>
-            <!-- keep storm out of the jar-with-dependencies -->
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-jms</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.activemq</groupId>
-            <artifactId>activemq-core</artifactId>
-            <version>5.4.0</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <!-- bind the maven-assembly-plugin to the package phase this will create
-                a jar file without the storm dependencies suitable for deployment to a cluster. -->
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptorRefs>
-                        <descriptorRef>jar-with-dependencies</descriptorRef>
-                    </descriptorRefs>
-                    <archive>
-                        <manifest>
-                        </manifest>
-                    </archive>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-
-            </plugin>
-
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>exec-maven-plugin</artifactId>
-                <version>1.2.1</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>exec</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <executable>java</executable>
-                    <includeProjectDependencies>true</includeProjectDependencies>
-                    <includePluginDependencies>true</includePluginDependencies>
-                    <mainClass>org.apache.storm.jms.example.ExampleJmsTopology</mainClass>
-                    <systemProperties>
-                        <systemProperty>
-                            <key>log4j.configuration</key>
-                            <value>file:./src/main/resources/log4j.properties</value>
-                        </systemProperty>
-                    </systemProperties>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.storm</groupId>
-                        <artifactId>storm-core</artifactId>
-                        <version>${project.version}</version>
-                        <type>jar</type>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java b/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java
deleted file mode 100644
index 82dbd5b..0000000
--- a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/ExampleJmsTopology.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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 org.apache.storm.jms.example;
-
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
-import org.apache.storm.Config;
-import org.apache.storm.LocalCluster;
-import org.apache.storm.LocalCluster.LocalTopology;
-import org.apache.storm.StormSubmitter;
-import org.apache.storm.jms.JmsMessageProducer;
-import org.apache.storm.jms.JmsProvider;
-import org.apache.storm.jms.JmsTupleProducer;
-import org.apache.storm.jms.bolt.JmsBolt;
-import org.apache.storm.jms.spout.JmsSpout;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.ITuple;
-import org.apache.storm.utils.Utils;
-
-public class ExampleJmsTopology {
-    public static final String JMS_QUEUE_SPOUT = "JMS_QUEUE_SPOUT";
-    public static final String INTERMEDIATE_BOLT = "INTERMEDIATE_BOLT";
-    public static final String FINAL_BOLT = "FINAL_BOLT";
-    public static final String JMS_TOPIC_BOLT = "JMS_TOPIC_BOLT";
-    public static final String JMS_TOPIC_SPOUT = "JMS_TOPIC_SPOUT";
-    public static final String ANOTHER_BOLT = "ANOTHER_BOLT";
-
-    @SuppressWarnings("serial")
-    public static void main(String[] args) throws Exception {
-
-        // JMS Queue Provider
-        JmsProvider jmsQueueProvider = new SpringJmsProvider(
-                "jms-activemq.xml", "jmsConnectionFactory",
-                "notificationQueue");
-
-        // JMS Topic provider
-        JmsProvider jmsTopicProvider = new SpringJmsProvider(
-                "jms-activemq.xml", "jmsConnectionFactory",
-                "notificationTopic");
-
-        // JMS Producer
-        JmsTupleProducer producer = new JsonTupleProducer();
-
-        // JMS Queue Spout
-        JmsSpout queueSpout = new JmsSpout();
-        queueSpout.setJmsProvider(jmsQueueProvider);
-        queueSpout.setJmsTupleProducer(producer);
-        queueSpout.setJmsAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
-        queueSpout.setDistributed(true); // allow multiple instances
-
-        TopologyBuilder builder = new TopologyBuilder();
-
-        // spout with 5 parallel instances
-        builder.setSpout(JMS_QUEUE_SPOUT, queueSpout, 5);
-
-        // intermediate bolt, subscribes to jms spout, anchors on tuples, and auto-acks
-        builder.setBolt(INTERMEDIATE_BOLT,
-                new GenericBolt("INTERMEDIATE_BOLT", true, true, new Fields("json")), 3).shuffleGrouping(
-                JMS_QUEUE_SPOUT);
-
-        // bolt that subscribes to the intermediate bolt, and auto-acks
-        // messages.
-        builder.setBolt(FINAL_BOLT, new GenericBolt("FINAL_BOLT", true, true), 3).shuffleGrouping(
-                INTERMEDIATE_BOLT);
-
-        // bolt that subscribes to the intermediate bolt, and publishes to a JMS Topic
-        JmsBolt jmsBolt = new JmsBolt();
-        jmsBolt.setJmsProvider(jmsTopicProvider);
-
-        // anonymous message producer just calls toString() on the tuple to create a jms message
-        jmsBolt.setJmsMessageProducer(new JmsMessageProducer() {
-            @Override
-            public Message toMessage(Session session, ITuple input) throws JMSException {
-                System.out.println("Sending JMS Message:" + input.toString());
-                TextMessage tm = session.createTextMessage(input.toString());
-                return tm;
-            }
-        });
-
-        builder.setBolt(JMS_TOPIC_BOLT, jmsBolt).shuffleGrouping(INTERMEDIATE_BOLT);
-
-        // JMS Topic spout
-        JmsSpout topicSpout = new JmsSpout();
-        topicSpout.setJmsProvider(jmsTopicProvider);
-        topicSpout.setJmsTupleProducer(producer);
-        topicSpout.setJmsAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
-        topicSpout.setDistributed(false);
-
-        builder.setSpout(JMS_TOPIC_SPOUT, topicSpout);
-
-        builder.setBolt(ANOTHER_BOLT, new GenericBolt("ANOTHER_BOLT", true, true), 1).shuffleGrouping(
-                JMS_TOPIC_SPOUT);
-
-        Config conf = new Config();
-
-        if (args.length > 0) {
-            conf.setNumWorkers(3);
-
-            StormSubmitter.submitTopology(args[0], conf,
-                    builder.createTopology());
-        } else {
-
-            conf.setDebug(true);
-
-            try (LocalCluster cluster = new LocalCluster();
-                 LocalTopology topo = cluster.submitTopology("storm-jms-example", conf, builder.createTopology());) {
-                Utils.sleep(60000);
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java b/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java
deleted file mode 100644
index 57de1ba..0000000
--- a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/GenericBolt.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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 org.apache.storm.jms.example;
-
-import java.util.Map;
-
-import org.apache.storm.topology.base.BaseRichBolt;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-
-/**
- * A generic <code>org.apache.storm.topology.IRichBolt</code> implementation
- * for testing/debugging the Storm JMS Spout and example topologies.
- * <p>
- * For debugging purposes, set the log level of the
- * <code>org.apache.storm.contrib.jms</code> package to DEBUG for debugging
- * output.
- *
- * @author tgoetz
- */
-@SuppressWarnings("serial")
-public class GenericBolt extends BaseRichBolt {
-    private static final Logger LOG = LoggerFactory.getLogger(GenericBolt.class);
-    private OutputCollector collector;
-    private boolean autoAck = false;
-    private boolean autoAnchor = false;
-    private Fields declaredFields;
-    private String name;
-
-    /**
-     * Constructs a new <code>GenericBolt</code> instance.
-     *
-     * @param name           The name of the bolt (used in DEBUG logging)
-     * @param autoAck        Whether or not this bolt should automatically acknowledge received tuples.
-     * @param autoAnchor     Whether or not this bolt should automatically anchor to received tuples.
-     * @param declaredFields The fields this bolt declares as output.
-     */
-    public GenericBolt(String name, boolean autoAck, boolean autoAnchor, Fields declaredFields) {
-        this.name = name;
-        this.autoAck = autoAck;
-        this.autoAnchor = autoAnchor;
-        this.declaredFields = declaredFields;
-    }
-
-    public GenericBolt(String name, boolean autoAck, boolean autoAnchor) {
-        this(name, autoAck, autoAnchor, null);
-    }
-
-    @SuppressWarnings("rawtypes")
-    public void prepare(Map stormConf, TopologyContext context,
-                        OutputCollector collector) {
-        this.collector = collector;
-
-    }
-
-    public void execute(Tuple input) {
-        LOG.debug("[" + this.name + "] Received message: " + input);
-
-
-        // only emit if we have declared fields.
-        if (this.declaredFields != null) {
-            LOG.debug("[" + this.name + "] emitting: " + input);
-            if (this.autoAnchor) {
-                this.collector.emit(input, input.getValues());
-            } else {
-                this.collector.emit(input.getValues());
-            }
-        }
-
-        if (this.autoAck) {
-            LOG.debug("[" + this.name + "] ACKing tuple: " + input);
-            this.collector.ack(input);
-        }
-
-    }
-
-    public void cleanup() {
-
-    }
-
-    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-        if (this.declaredFields != null) {
-            declarer.declare(this.declaredFields);
-        }
-    }
-
-    public boolean isAutoAck() {
-        return this.autoAck;
-    }
-
-    public void setAutoAck(boolean autoAck) {
-        this.autoAck = autoAck;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java b/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java
deleted file mode 100644
index 9ee175e..0000000
--- a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/JsonTupleProducer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 org.apache.storm.jms.example;
-
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.TextMessage;
-
-import org.apache.storm.jms.JmsTupleProducer;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-
-/**
- * A simple <code>JmsTupleProducer</code> that expects to receive
- * JMS <code>TextMessage</code> objects with a body in JSON format.
- * <p/>
- * Ouputs a tuple with field name "json" and a string value
- * containing the raw json.
- * <p/>
- * <b>NOTE: </b> Currently this implementation assumes the text is valid
- * JSON and does not attempt to parse or validate it.
- * 
- * @author tgoetz
- *
- */
-@SuppressWarnings("serial")
-public class JsonTupleProducer implements JmsTupleProducer {
-
-	public Values toTuple(Message msg) throws JMSException {
-		if(msg instanceof TextMessage){
-			String json = ((TextMessage) msg).getText();
-			return new Values(json);
-		} else {
-			return null;
-		}
-	}
-
-	public void declareOutputFields(OutputFieldsDeclarer declarer) {
-		declarer.declare(new Fields("json"));
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java
----------------------------------------------------------------------
diff --git a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java b/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java
deleted file mode 100644
index 306fc25..0000000
--- a/external/storm-jms/examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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 org.apache.storm.jms.example;
-
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import org.apache.storm.jms.JmsProvider;
-
-
-/**
- * A <code>JmsProvider</code> that uses the spring framework
- * to obtain a JMS <code>ConnectionFactory</code> and 
- * <code>Desitnation</code> objects.
- * <p/>
- * The constructor takes three arguments:
- * <ol>
- * <li>A string pointing to the the spring application context file contining the JMS configuration
- * (must be on the classpath)
- * </li>
- * <li>The name of the connection factory bean</li>
- * <li>The name of the destination bean</li>
- * </ol>
- * 
- *
- *
- */
-@SuppressWarnings("serial")
-public class SpringJmsProvider implements JmsProvider {
-	private ConnectionFactory connectionFactory;
-	private Destination destination;
-	
-	/**
-	 * Constructs a <code>SpringJmsProvider</code> object given the name of a
-	 * classpath resource (the spring application context file), and the bean
-	 * names of a JMS connection factory and destination.
-	 * 
-	 * @param appContextClasspathResource - the spring configuration file (classpath resource)
-	 * @param connectionFactoryBean - the JMS connection factory bean name
-	 * @param destinationBean - the JMS destination bean name
-	 */
-	public SpringJmsProvider(String appContextClasspathResource, String connectionFactoryBean, String destinationBean){
-		ApplicationContext context = new ClassPathXmlApplicationContext(appContextClasspathResource);
-		this.connectionFactory = (ConnectionFactory)context.getBean(connectionFactoryBean);
-		this.destination = (Destination)context.getBean(destinationBean);
-	}
-
-	public ConnectionFactory connectionFactory() throws Exception {
-		return this.connectionFactory;
-	}
-
-	public Destination destination() throws Exception {
-		return this.destination;
-	}
-
-}


[09/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/sampledata/randomwords.txt
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/sampledata/randomwords.txt b/examples/storm-perf/src/main/sampledata/randomwords.txt
new file mode 100644
index 0000000..1b800cf
--- /dev/null
+++ b/examples/storm-perf/src/main/sampledata/randomwords.txt
@@ -0,0 +1,14049 @@
+Hester starosta Bassaris guanajuatite pinulus debromination 	
+outhue pamphlet Socraticism tomorrowness masa Bertat Vichyite 	
+epauliere magnificently Mormyrus circumzenithal sapphiric Homoiousian misthread 	
+Pithecolobium saguran hemimelus epauliere symbiogenetically 	
+chronist cervisial euphemious topline sandbox pneumonalgia Babylonism sawdust by 	
+figured impressor theologicopolitical scrat arsenide cockal roughcast introducer playfellowship 	
+potentness Tsonecan ovopyriform inertly Bertat acocotl whitlowwort 	
+Gothish Pishquow corona interruptedness glossing molecule preagitate 	
+seelful unscourged swangy Mycogone bogydom nummi homotransplant unburnt 	
+guitarist cockal Coniferae cylindric ovopyriform nonmanufacture monilioid hypochondriacism 	
+underogating impairment genii Ludgatian palaeotheriodont marten 	
+euphonym zoonitic cervisial Bertat guanajuatite Vaishnavism nonsuppressed subsequentially 	
+scotale semiangle epididymitis bestill nonutilitarian lifter pyrocatechol obolus 	
+scrat unpremonished ungrave undeterring winterproof zanyism Itea tonsure 	
+antideflation rivethead seeingness snare refasten repealableness monstership bacillite 	
+biodynamics antiadiaphorist strander undangered Hester 	
+overwoven fallacious yawler seelful helminthagogic 	
+quad putative whittle placatory vinny nebular sialadenitis 	
+epauliere elemicin greave relaster pyroacetic nectopod nonexecutive weism dunkadoo 	
+sarcologist tetragynian cubit frictionlessly magnetooptics undangered glyphography vinny 	
+bladderwort unobservantness unswanlike terrestrially botchedly ultraobscure 	
+papery mesymnion embryotic Bulanda pumpkinification Bassaris cromlech ungrave 	
+Semecarpus commotion familist uncontradictableness manny vinny 	
+eurythermal enation oratorship cretaceous hypoid 	
+biopsic yote ineunt subangulated mutter barkometer 	
+manny signifier brag heavenful Homoiousian undeterring michigan 	
+ultratense Protestantize angina zenick swearingly unexplicit 	
+monstership unrepealably shibuichi enhedge pachydermous bozal rechar lineamental 	
+thermochemically nonutilitarian uninterpleaded Florissant ineunt jharal aneurism stachyuraceous 	
+neuromimesis reperuse magnificently scyphostoma manganosiderite 	
+merciful becomma unrealize Vaishnavism superindifference trillium soorkee rechar 	
+lienteria Orbitolina Protestantize Gothish molossic nonsuppressed nonutilitarian 	
+cyanoguanidine feasibleness unstipulated thermoresistant slait Inger characinoid 	
+transudatory seizing ungreat almud monander abstractionism socioromantic 	
+sequestrum sequestrum widdle angina bacillite 	
+tum beatable seraphism bozal cattimandoo skyshine sombreroed emir 	
+circular strander diplomatize veterinarian inertly prolificy prepavement 	
+taver sequestrum corbel classificational mangonism strander swacking 	
+unrevolting Sebastian spiranthic hepatorrhaphy oflete subangulated subtransverse 	
+unharmed myesthesia trophonema bozal immatchable 	
+uninhabitedness eristically Eryon allegedly daytime periclitation phallaceous 	
+phytonic yote Serrifera nonmanufacture Animalivora 	
+bozal gunshop ornithodelphous Tamil chorograph Quakerishly outwealth laryngic hepatorrhaphy 	
+pinulus uninhabitedness endotheliomyoma unachievable Confervales ladhood chilblain 	
+unachievable nonmanufacture rave Prosobranchiata dermorhynchous minniebush oinomancy overinstruct ventricous 	
+precostal ununiformly mastication figured idiotize antihero 	
+Kenipsim beneficent blurredness Dawsonia twinling phallaceous impugnation dermorhynchous 	
+packsack zanyism breadwinner Megaluridae uncarefully zenick dishpan squdge 	
+dialoguer theologicopolitical subfoliar mangonism mustafina champer 	
+Consolamentum exploiter imperceptivity nectopod breadwinner floatability 	
+heavenful theologicopolitical pyrocatechol ferrogoslarite infestation dermorhynchous lampyrine 	
+shallowish crystallographical uninhabitedness cocksuredom yawler hysterolysis genii bromic 	
+antalgol chronographic chasmy proboscidiform craglike stiffish 	
+marshiness Scanic adz uninterpleaded trailmaking stormy impairment Dunlop pinulus 	
+mechanist helminthagogic semantician ununiformly incomprehensible equiconvex adatom transcorporeal sertularian 	
+migrainoid bacillite wandoo sapience counteralliance preparative unpeople aurothiosulphuric 	
+deindividualization astucious rede schoolmasterism boor alveolite bogydom unaccessible tendomucoid 	
+glyphography antihero furacious centrifugalization eurythermal atlantite counteractively metaphonical 	
+Hydrangea spermaphyte canicule impugnation meloplasty introducer 	
+lithotresis Effie saccharogenic arsenide porencephalous speckedness 	
+bought patroller uvanite unevoked basto dehairer bought 	
+posterishness overstaid exploiter mesymnion angina oratorize winterproof Ochnaceae iniquitously 	
+jharal gallybeggar marshiness subdentate twinling redecrease ramosopalmate 	
+chronist underskin wandoo diurnalness haply helpless chilblain unforkedness 	
+epididymitis archesporial uncompromisingly mesymnion karyological yawler 	
+ventricous horsefly bespin autobiographist deaf Lemuridae Caphtor misexposition 	
+abscission masa scyphostoma pentafid nonlustrous lebensraum 	
+posttraumatic uninductive sloped transude enation lithograph pachydermous papery 	
+weism proacquittal greave Scorpaenidae arrowworm 	
+velaric doubtingness Swaziland unstressedly coracomandibular 	
+iniquitously suspend relaster dunkadoo Glecoma larklike uncompromisingly unscourged 	
+macropterous reappreciate countergabion immatchable ovopyriform Russifier thiodiazole rizzomed sequacity 	
+neuromimesis balladmonger bladderwort furacious nonpoisonous tetchy pumpkinification laryngic Effie 	
+opacousness cacuminal unleavened lithotresis metaphonical antideflation feasibleness subfebrile 	
+underskin unpatched Gothish stradametrical yeat 	
+Dawsonia counteractively merciful doubtingness Spencerism havoc involatile precostal 	
+Mormyrus calabazilla tomorn valvula glandularly supraoesophageal ungrave 	
+overstaid throbless lampyrine phallaceous experientialist blurredness okonite 	
+subdrainage periarthritis unrepealably enation pansophism 	
+helminthagogic digitule quarried metastoma molecule Uraniidae harr mediateness slipped 	
+Aktistetae diminutively cresylite antihero spiciferous ascitic 	
+dehairer mangonism Lincolnlike prescriber templar 	
+Ophiosaurus plerome tantivy diplomatize squdge venialness 	
+imprescribable angiolymphoma seeingness exprobratory Glecoma mechanist avengeful diopside uncontradictableness 	
+decidable parodist unexplicit physiologian Munychian parabolicness propheticism 	
+homotransplant reperuse antiabolitionist sialadenitis plerome Dunlop uncontradictableness 	
+pachydermous preoral chargeably sterilely aneurism cubby yeelaman 	
+migrainoid totaquina benthonic centrifugalization pyroacetic nonutilitarian corona 	
+interruptor diatomaceous oxyterpene beneficent returnability molecule 	
+tantivy comism misthread cubby cretaceous ungrave 	
+eristically waird overcontribute totaquina proboscidiform tramplike 	
+counteralliance ungreat unchatteled bucketer bespin parastas defensibly chasmy 	
+calabazilla cubit synovial bacterioblast neurodegenerative apopenptic asparaginic 	
+inductivity undinted thermochemically antiabolitionist pendulant 	
+pachydermous tum Pishquow inertly ventricous 	
+manganosiderite skyshine Bishareen tailoress transcortical homeotypical glacierist 	
+devilwise enhedge pendulant cervisial preagitate yote eucalypteol cornberry clanned 	
+subfoliar impairment bromic Eryon centrifugalization mericarp folious 	
+dithery exploiter liquidity imaginary bismuthiferous archididascalian monstership eer 	
+astucious triradiated uncontradictableness pneumatotherapy overstudiousness fetlocked counteralliance Aplacentalia 	
+ticktick antideflation larklike Macraucheniidae nonlustrous Confervales nonlustrous antideflation 	
+extraorganismal apopenptic subdentate pachydermous metastoma abusiveness 	
+Zuludom insatiately Passiflorales oinomancy antideflation fetlocked Consolamentum 	
+dishpan cromlech sapphiric putative unreprimanded cumbrousness lifter agglomeratic karyological 	
+laubanite Cephalodiscus Zuludom unbashfulness obispo tonsure incalculable 	
+periclitation approbation imperceptivity sequentially wingable 	
+arsenide feasibleness spiciferous choralcelo manilla undinted Jerusalem goladar stewardship 	
+Bulanda visceral orthopedical antideflation epauliere codisjunct poleax kerykeion 	
+by misexposition benzothiofuran macropterous gallybeggar sviatonosite 	
+heliocentricism unpeople unlapsing chorograph transcortical unlapsing 	
+sawdust byroad iniquitously omega subfoliar ethnocracy jajman aprosopia 	
+Hester foursquare Helvidian diwata reformatory putative louse unscourged 	
+Quakerishly prolificy avengeful commotion temporomastoid 	
+cacuminal hypochondriacism cornberry brooky terrificness iniquitously undeterring 	
+terrestrially seelful parabolicness benzoperoxide approbation 	
+Machiavel subangulated overcrown yeat involatile 	
+nummi stachyuraceous Mormyrus lebensraum chronist subfebrile barkometer 	
+unpredict meloplasty characinoid hemimelus velaric aconitine figureheadship 	
+impugnation sturdied Hester alen zanyism consumptional 	
+horsefly enhedge projecting tomorrowness eer debromination doubtingness unpatched gemmeous 	
+metrocratic gemmeous uncombable slait papery depressingly 	
+flutist deindividualization scapuloradial perculsive selectivity Spencerism 	
+equiconvex pamphlet cervisial micromembrane paleornithology serosanguineous cuproiodargyrite 	
+reperuse quailberry diopside rivethead meloplasty incomprehensible 	
+sangaree pelvimetry ploration dithery amplexifoliate Ludgatian 	
+flatman enation cubit componental inventurous botchedly 	
+autobiographist flushgate stiffish allectory ambitus triakistetrahedral unprovided chargeably 	
+heavenful parquet equiconvex outwealth Pyrales unpeople diatomaceous canicule 	
+Megaluridae twinling bucketer sertularian metaphrastical 	
+breadwinner imaginary lithotresis selectivity Hysterocarpus Triconodonta steprelationship 	
+uniarticular angiopathy laryngic preagitate synovial scabbardless socioromantic swoony inventurous 	
+Vichyite liquidity bogydom autoschediastical scotale debellator 	
+sequentially omega characinoid unisexuality parodist 	
+cubit Alethea unevoked photoelasticity Ophiosaurus acidophile redesertion 	
+depravity Homoiousian analgize venialness archistome orthopedical quadrennial affaite 	
+technopsychology seeingness ambitus kerykeion abusiveness enterostomy pansophism appetible swearingly 	
+paleornithology Vichyite corelysis affaite sesquiquintile incomprehensible 	
+pompiloid saguran isopelletierin okonite tramplike signifier trip 	
+jharal frenal playfellowship neuromimesis jirble cumbrousness depravity 	
+splenauxe hypoplastral collegian nectopod metrocratic erythremia precostal 	
+brooky gunshop Consolamentum Isokontae Shiah biopsic Savitar sturdied 	
+sangaree sesquiquintile Ochnaceae ungrave whittle 	
+parquet diatomaceous detractive flutist transcorporeal enterostomy 	
+templar decardinalize undecorated parodist noreast sturdied noreast furacious uninductive 	
+regardful unaccessible parabolicness Bishareen peptonate pseudohalogen velaric bacillite componental 	
+impressor antineuritic waird winterproof expiscate 	
+porriginous boser catabaptist pyrocatechol intuition 	
+helpless bubble depressingly taver comism catabaptist 	
+unleavened serosanguineous upcushion Fameuse groundneedle masa rivethead 	
+amplexifoliate thiodiazole apocalypst enterostomy uvanite 	
+catabaptist Aktistetae bladderwort inertly unforkedness Hester socioromantic 	
+uncompromisingness sural piquantness appetible frameable waird diopside tricae 	
+triakistetrahedral semantician aquiline Filipendula heavenful danseuse Tsonecan jajman waird 	
+strander enhedge outwealth epauliere depravity calabazilla 	
+yeat interruptor balanocele homotransplant upswell analgic Uraniidae 	
+Dodecatheon equiconvex adatom knob soorkee cubby shola pleasurehood 	
+unswanlike unpatched overcultured shola shellworker bucketer transude foursquare 	
+tristich pneumonalgia velaric Aplacentalia sheepskin umangite lineamental zenick acidophile 	
+ferrogoslarite ununiformly analgize rehabilitative tambo upswell Scorpaenidae 	
+meriquinoidal yeelaman photoelasticity refasten embryotic guitarist metrocratic 	
+pneumonalgia hackneyed gallybeggar foursquare valvula 	
+preaffiliate diathermacy pyrocatechol brag parodist sandbox agglomeratic prescriptible sturdied 	
+disilane ell scapuloradial havoc inferent sandbox galbulus Pithecolobium erythrodextrin 	
+interfraternal masa whittle expiscate brutism oinomancy bucketer depravity 	
+antideflation swacking cuproiodargyrite jajman Macraucheniidae temporomastoid 	
+decardinalize louse coracomandibular bunghole velaric emir tambo Russifier trisilicic 	
+classificational trillion diplomatize uncontradictableness subangulated arrowworm hemimelus marshiness penult 	
+adz thermanesthesia Munnopsidae paranephros emir basto choralcelo Bulanda 	
+autobiographist kerykeion symbiogenetically repealableness stroking stradametrical 	
+overbuilt periclitation Pincian nonsuppressed warlike helpless 	
+ineunt tramplike corona bucketer corona 	
+superindifference pictorially aneurism chrysochrous comism jirble percent arsenide 	
+Tamil vesperal bought pseudoxanthine danseuse unlapsing 	
+sapphiric Mesua starosta wandoo antalgol kerykeion 	
+raphis Dictograph unswanlike larklike hondo slangy subfebrile cuproiodargyrite 	
+dispermy okonite circular terrestrially componental chrysochrous stronghearted sandbox adz 	
+hepatorrhaphy superindifference inventurous tonsure wherefrom Orbitolina codisjunct 	
+experientialist preagitate metoxazine mesymnion diwata regardful prolificy 	
+diminutively heavenful octogynous unrevolting nonsuppressed 	
+archistome idiotize sterilely neurodegenerative evictor 	
+Sphenodontidae swearingly monilioid squit nonuple flatman 	
+pentosuria strammel fossilism parastas characinoid 	
+trillion semiangle hymnic trillium subsequentially ell cyanophilous farrantly balladmonger 	
+sapphiric vesperal ethmopalatal dehairer intrabred Pyrales Homoiousian 	
+louse ungrave ascitic bestill topline 	
+potentness thorite repealableness antalgol pompiloid overcontribute orthopedical valvula 	
+feasibleness Pincian appetible preoral ten Hysterocarpus Orbitolina undangered 	
+erlking ornithodelphous bromate starer ventricous flutist Harpa folious 	
+elastivity oversand heavenful ladhood eucalypteol havoc Fouquieria dosseret chooser 	
+mutter reappreciate topsail heavenful archididascalian 	
+spermaphyte untongued upcushion naught clanned 	
+chilblain metrocratic jajman astucious chargeably beatable 	
+nonpoisonous idiotize groundneedle ultraobscure dastardliness interfraternal giantly 	
+sural spiciferous intuition lophotrichic pope mastication jharal chronist 	
+circular twinling sud bestill trunnel proauction 	
+paunchy pansophism overbuilt stroking electrotechnics 	
+meriquinoidal leucophoenicite socioromantic impairment nummi 	
+yeelaman spot pachydermous bot theologicopolitical pelvimetry unaccessible sloped 	
+oxyterpene instructiveness trophonema nonexecutive critically decidable 	
+ascitic paradisean corelysis noreast seeingness arduousness acocotl friarhood becomma 	
+iniquitously cervisial octogynous inductivity Edo 	
+Thraupidae Russifier prolificy stronghearted ununiformly 	
+visceral visceral involatile introducer hyocholic 	
+noncrystallized angiopathy preoral unpredict marshiness 	
+Mycogone immatchable bogydom palaeotheriodont diathermacy laurinoxylon stroking saccharogenic arsenide 	
+retinize Christianopaganism cacuminal cloy atlantite becomma vesperal nonpoisonous stentorophonic 	
+canicule tum constitutor authorling antihero superindifference 	
+toplike flatman bot saccharogenic swearingly 	
+unlapsing docimastical arval laryngic characinoid technopsychology weism 	
+Pishquow balladmonger coracomandibular glyphography merciful tingly Caphtor ungrave 	
+leucophoenicite Effie prepavement angiolymphoma Confervales weism 	
+decardinalize manilla endotheliomyoma Dawsonia japanned scrubbed unevoked boor 	
+mangonism vinny plugger thiodiazole immatchable Spencerism seelful 	
+warlike vinny pondside pondside Bermudian inventurous unurban pachydermous oratorship 	
+pseudoxanthine ethnocracy theologal meriquinoidal saccharogenic sialadenitis tetrahedral pyxie 	
+synovial predisputant ten unprovided Saponaria seeingness toplike 	
+pondside fallacious enation valvula noreast bathysphere infestation 	
+mammonish gymnastic deepmost widdle atlantite antivenin 	
+Munnopsidae dunkadoo overstaid redescend uncombable foursquare thermoresistant gymnastic 	
+introducer laurinoxylon decardinalize Joachimite cylindric subsequentially 	
+orthopedical relaster generalizable trophonema coadvice eristically Vaishnavism 	
+rosaniline Thraupidae monilioid extraorganismal predebit hypochondriacism marten mericarp 	
+biventer undiffusive pendulant transcortical sombreroed cumbrousness pinulus ovoviviparous 	
+asparaginic Machiavel lithograph parmelioid unleavened 	
+warlike overcontribute Helvidian aurothiosulphuric dinical gallybeggar pamphlet swoony 	
+coldfinch percent paleornithology Protestantize diwata 	
+imaginary aurothiosulphuric cervisial prescriber rizzomed skyshine Socraticism Cimmerianism seelful 	
+parquet poleax unevoked coadvice repealableness Munychian endotheliomyoma apopenptic eucalypteol 	
+quintette pneumatotherapy ornithodelphous sirrah hoove 	
+nonuple Swaziland planosubulate bromic potentness skyshine eulogization 	
+smokefarthings stormy ineunt nonexecutive Ophiosaurus greave bonze raphis boser 	
+elemicin ell hackneyed Haversian tomorrowness nonsuppressed embryotic daytime boser 	
+heliocentricism antiscolic gelatinousness scrubbed overstudiousness lifter periclitation 	
+tingly shellworker aneurism prospectiveness unefficient uninductive Spatangoidea culm 	
+taurocolla adscendent inexistency quarried trabecular oratorship 	
+vitally topsail raphis parastas eristically chordacentrum 	
+Lincolnlike cornberry mammonish mesophyte overcrown quadrennial swacking mendacity macropterous 	
+Tamil diopside pneumatotherapy comprovincial uncontradictableness Mormyrus 	
+uninterpleaded starosta rosaniline triradiated prolificy 	
+aquiline waird saccharogenic pachydermous Macraucheniidae neurodegenerative speckedness overcrown 	
+infrastapedial percent thermanesthesia ticktick periclitation sequacity 	
+agglomeratic centrifugalization unaccessible gelatinousness angiolymphoma Pithecolobium reeveland unfurbelowed beadroll 	
+culm unrevolting theologicopolitical soorkee gemmeous avengeful 	
+marten deindividualization bathysphere bettermost saccharogenic Passiflorales seditious mendacity erlking 	
+bromate deepmost stachyuraceous characinoid floatability obolus 	
+overcultured triradiated oblongly adatom stronghearted patroller Jerusalem 	
+commotion cheesecutter semiangle uninterpleaded monander danseuse 	
+bromate scyphostoma reeveland doina commotion parquet tonsure 	
+antiadiaphorist Swaziland twinling stiffish exploiter 	
+arrowworm uncontradictableness furacious pomiferous Harpa pope 	
+yeat deindividualization monander wandoo subangulated Filipendula oxyterpene prepavement Christianopaganism 	
+benzoperoxide Bushongo slangy larklike overstudiousness pentosuria unfulminated 	
+mangonism mangonism overstudiousness bogydom ungrave oxyterpene repealableness 	
+instructiveness balladmonger cattimandoo karyological magnetooptics misthread 	
+roughcast theologal bucketer angiopathy theologicopolitical 	
+spot seminonflammable hondo Eleusinian metaphonical elastivity predisputant 	
+pentafid eer tailoress pictorially phlogisticate ploration nummi thiodiazole Joachimite 	
+slait unstressedly bucketer Spencerism outguess tingly chasmy 	
+depravity unscourged corona Gothish allegedly frenal 	
+interruptor benzoperoxide mammonish slipped immatchable 	
+impairment havoc plugger intuition equiconvex interruptedness guitarist diatomaceous dinical 	
+constitutor Protestantize circular edificator sequestrum hogmace 	
+reciprocation saguran Arneb cacuminal arval prepavement eulogization 	
+toxihaemia seelful frameable Swaziland counteractively bacillite 	
+gelatinousness uncombable sonable seraphism thorite byroad 	
+oversand authorling umangite tartrous verbid 	
+beneficent neurodegenerative toplike scyphostoma perculsive 	
+airfreighter Alethea bucketer tonsure Confervales 	
+feasibleness omega flatman throbless tomorn returnability diatomaceous 	
+balladmonger epidymides sirrah terrificness disilane unurban 	
+Confervales involatile overcultured astronomize Munnopsidae chrysochrous foursquare 	
+seraphism preagitate helminthagogic benzoperoxide Glecoma Yannigan umangite veterinarian subofficer 	
+overcultured airfreighter jirble thiodiazole stradametrical ipomoein cuproiodargyrite templar ambitus 	
+umbellic toxihaemia Llandovery apopenptic jajman pope doubtingness pleasurehood Coniferae 	
+abthainry Vaishnavism patroller verbid terrificness 	
+apopenptic stewardship precostal Yannigan limpet weism Animalivora greave 	
+Munnopsidae proacquittal extraorganismal undeterring drome 	
+apocalypst entame benthonic bettermost proauction photoelasticity 	
+dosseret eucalypteol liquidity scabbiness quintette velaric totaquina 	
+splenauxe deaf asparaginic unefficient Auriculariales Thraupidae relaster harr preparative 	
+pinulus jharal propodiale frameable angiopathy biventer harr 	
+plugger propheticism speckedness Cercosporella slipped hymnic 	
+lineamental strammel Filipendula monstership comprovincial sialadenitis sesquiquintile warlike 	
+golem splenauxe dehairer gymnastic imaginary 	
+cocksuredom impairment Uraniidae Uraniidae apocalypst phytonic Auriculariales osteopaedion Florissant 	
+stormy sequentially introducer suspend Ochnaceae nonsuppressed Whilkut bromic antalgol 	
+chronist umbellic speckedness discipular Dunlop sturdied scabbiness 	
+sandbox phlogisticate endotheliomyoma hypoplastral tambo subtransverse 	
+phallaceous pony obispo pony acidophile preparative semiangle depthwise brooky 	
+exprobratory involatile prescriptible counterappellant ovoviviparous 	
+seizing Llandovery seeingness wherefrom liquidity tetrahedral arrendation 	
+emir larklike biventer proacquittal Swaziland unsupercilious Machiavel decidable rainproof 	
+tartrous imperceptivity amylogenesis devilwise reappreciate pondside ultratense pleasurehood periclitation 	
+enterostomy elastivity archesporial antiscolic drome unpremonished strander bladderwort sapphiric 	
+serphoid pope potentness angiolymphoma cromlech photoelasticity 	
+symbiogenetically metrocratic monstership diurnalness eucalypteol laurinoxylon 	
+Orbitolina yawler Shiah metoxazine ovopyriform tricae thermanesthesia 	
+nonexecutive elemicin pleurotropous cocksuredom reformatory knob projecting tomorn 	
+Sebastian sandbox trisilicic nonlustrous morphiomania monilioid guanajuatite strander 	
+ineunt upswell cromlech airfreighter sud liberatress speckedness digitule Serrifera 	
+paradisean sarcologist manny rosaniline ungrave cocksuredom greave 	
+Tsonecan whittle soorkee astronomize peristeropode 	
+karyological rehabilitative pterostigma gala neurotrophic Cimmerianism Aplacentalia collegian clanned 	
+signifier Hysterocarpus projecting patroller Scanic stiffish glossing starosta 	
+parodist deaf diurnalness taurocolla gala goodwill golem undangered zanyism 	
+nonrepetition beadroll spot yeelaman Sebastian circumzenithal Christianopaganism debellator cubby 	
+rebilling omega eer apocalypst aurothiosulphuric proauction imperceptivity cinque chooser 	
+fallacious cubby defensibly pompiloid participatingly archesporial trip defensibly 	
+breadwinner cattimandoo abscission winterproof ultraobscure 	
+isopelletierin Llandovery hysterogen preparative Bermudian 	
+bugre unfulminated redesertion arteriasis frameable cockal Protestantize 	
+calabazilla intuition pope naprapath porriginous Dictograph posttraumatic 	
+japanned arrowworm laurinoxylon eristically defensibly toxoplasmosis pentafid 	
+circumzenithal dastardliness basto Bertat oflete 	
+guanajuatite redecrease experientialist thermochemically molossic 	
+frameable rede Pithecolobium chasmy meriquinoidal regardful 	
+evictor planosubulate testa entame orthopedical 	
+scrat friarhood Spencerism Ghent pomiferous magnificently Triconodonta 	
+reeveland gul omega valvulotomy sloped 	
+lifter spermaphyte dithery experientialist unharmed ungreat seeingness Bertat Dawsonia 	
+aneurism involatile pomiferous homeotypical archistome 	
+overwoven anta stradametrical countergabion Aktistetae unsupercilious benzoperoxide 	
+Ludgatian Kenipsim bought adz glacierist Christianopaganism 	
+trabecular counterappellant outguess kerykeion counteractively Endomycetaceae exploiter 	
+inventurous bettermost undiffusive nummi bespin 	
+goladar macropterous clanned pinulus dipsomaniacal 	
+frontoorbital analgic oblongly feasibleness Hester 	
+laubanite dosseret phoenicochroite redecrease ungreat nonexecutive lyrebird redecrease 	
+refasten airfreighter myesthesia heavenful whitlowwort depressingly scrat Aplacentalia antiscolic 	
+testa aneurism cornberry Semecarpus Passiflorales 	
+counteractively cromlech osteopaedion engrain uloid metopon euphemious metapolitics 	
+cromlech chorograph tum undinted wherefrom nebular 	
+Dictograph stronghearted Yannigan paradisean rebilling photoelasticity 	
+physiologian scapuloradial interruptor unforkedness intuition 	
+pachydermous eurythermal hondo chalcites outguess 	
+bromic blurredness familist erythrodextrin bought ramosopalmate 	
+returnability rivethead chasmy Arneb phoenicochroite oblongly 	
+undeterring bozal counterappellant pictorially Pishquow 	
+templar valvulotomy nummi valvulotomy Homoiousian limpet unschematized 	
+brooky rotular proacquittal predebit componental thermochemically 	
+rivethead lampyrine unsupercilious brooky ell coadvice Harpa 	
+biopsic sesquiquintile coldfinch isopelletierin ultratense tickleproof propheticism misexposition 	
+embryotic docimastical beadroll cubby champer groundneedle archistome devilwise autobiographist 	
+generalizable Machiavel unpatched licitness abthainry vinegarish 	
+Endomycetaceae characinoid atlantite elastivity Dawsonia mericarp stewardship dermorhynchous horsefly 	
+Sphenodontidae dishpan farrantly almud glossing 	
+archesporial monogoneutic upswell scrubbed opacousness drome lampyrine Ochnaceae 	
+quad trillium veterinarian circumzenithal hypoid 	
+choralcelo beneficent pamphlet epauliere lyrebird impairment 	
+uncombable oratorship nonprofession osteopaedion Harpa 	
+unpeople Tamil Pishquow helpless cacuminal 	
+hemimelus omega metaphonical Chiasmodontidae ethmopalatal euphonym totaquina 	
+manilla Scorpaenidae knob saccharogenic bestill tramplike 	
+incomprehensible foursquare constitutor serosanguineous warriorwise brutism 	
+flushgate prolificy spiciferous uncombable glossing 	
+Inger deaf Aktistetae frenal chooser meriquinoidal hoove Pyrales 	
+blightbird digitule guitarist chargeably Pithecolobium 	
+ungouged Hydrangea veterinarian widdle patroller myesthesia sportswomanship ovopyriform elastivity 	
+overwoven shibuichi volcano quadrennial bestill biventer michigan Aplacentalia bespin 	
+gemmeous pachydermatoid corelysis umangite metoxazine enhedge unpatched 	
+Russifier seizing louse componental morphiomania socioromantic infestation downthrust 	
+affaite unrevolting obolus swoony circular kerykeion sertularian saguran 	
+Uraniidae subtransverse pinulus scrat pumpkinification physiologian cylindric metaphonical masa 	
+tambo pumpkinification Haversian brooky temporomastoid gymnastic octogynous Aktistetae skyshine 	
+mesophyte scrubbed nonlustrous hysterogen seminonflammable volcano chrysochrous zanyism 	
+japanned Eryon uncompromisingness corona sturdied relaster equiconvex agglomeratic undeterring 	
+impressor oratorize outwealth stewardship marshiness pachydermatoid stiffish blurredness bugre 	
+uloid limpet ambitus archididascalian parabolicness leucophoenicite 	
+sombreroed blightbird uncarefully Eryon unrepealably dipsomaniacal overcultured 	
+sedentariness tailoress tantivy ultrasystematic pelvimetry lithotresis rainproof meloplasty cyanoguanidine 	
+authorling archistome parastas Bassaris eternal obolus unisexuality 	
+ramosopalmate prezygapophysial manganosiderite mangonism hellbender volcano oflete 	
+snare saguran chorograph brooky Protestantize cuproiodargyrite experientialist 	
+gymnastic rehabilitative constitutor Pithecolobium signifier bonze Christianopaganism 	
+affaite tomorn bismuthiferous airfreighter hypoid decardinalize boor asparaginic 	
+unharmed pendulant allotropic infravaginal Serrifera hysterogen antiabolitionist mesymnion liquidity 	
+quailberry blurredness chronist diopside spherulitic subdrainage subofficer pompiloid sequestrum 	
+selectivity leucophoenicite serpentinic enation merciful Bishareen thermanesthesia 	
+outwealth scrat knob marten Vichyite byroad endotheliomyoma 	
+neurodegenerative Christianopaganism arrendation dinical plerome 	
+Gothish sapphiric homotransplant manilla counteralliance experientialist hogmace tonsure 	
+unleavened phoenicochroite glossing soorkee unexplicit uncarefully myesthesia shola cumbrousness 	
+tomorrowness inductivity interruptedness golem metoxazine greave gul 	
+warriorwise raphis antalgol monander brooky nonutilitarian slipped veterinarian by 	
+retinize Arneb antalgol Cephalodiscus taver gemmeous 	
+Vaishnavism intrabred smokefarthings Edo tambo tambo scyphostoma folious guanajuatite 	
+Dadaism aprosopia psychofugal thermoresistant undeterring 	
+impairment macropterous trillium cretaceous stiffish astucious piquantness 	
+Megaluridae impugnation neuromimesis Scorpaenidae porriginous 	
+Hysterocarpus sequacity antiscolic corbel scotching tomorn collegian 	
+reconciliable semiangle manilla serphoid Dictograph codisjunct smokefarthings Isokontae 	
+coldfinch triradiated circumzenithal reconciliable farrantly cuproiodargyrite prepavement leucophoenicite 	
+gala becomma mastication reconciliable laurinoxylon provedore 	
+untongued culm hellbender diplomatize japanned 	
+exploiter thorite thorite trisilicic mesymnion undecorated toplike metopon scotching 	
+cattimandoo rainproof reciprocation perfunctory Cephalodiscus generalizable undeterring proboscidiform Isokontae 	
+flatman hemimelus papery valvula playfellowship carposporangial Spatangoidea tomorn 	
+chorograph Confervales Haversian scyphostoma reperuse feasibleness paradisean 	
+seelful subirrigate reappreciate signifier triradiated stachyuraceous pansophism uninductive 	
+countergabion tantivy obolus unreprimanded trunnel genii 	
+diatomaceous jajman Vichyite pumpkinification neurotrophic 	
+planispheric groundneedle hackneyed parabolicness frontoorbital 	
+taurocolla brutism sloped dermorhynchous imprescribable 	
+lammy insatiately unlapsing countergabion neuromimesis 	
+golem projecting ungouged Zuludom oxyterpene thermochemically throbless projecting 	
+infestation rave silicize Alethea peptonate 	
+unaccessible Sebastian Hydrangea debromination tartrous Oryzorictinae 	
+subangulated characinoid valvula Prosobranchiata omega experientialist tartrous 	
+Orbitolina inventurous phoenicochroite Quakerishly Haversian basto 	
+angiolymphoma swearingly autoschediastical merciful Coniferae parodist 	
+constitutor overcultured diurnalness expiscate undiffusive moodishness tonsure Munychian 	
+tendomucoid ethmopalatal spookdom hogmace idiotize 	
+bromic weism carposporangial imprescribable orthopedical ultrasystematic sesquiquintile 	
+perculsive metaphonical byroad unrepealably disilane taurocolla prescriber wingable pony 	
+angina uniarticular decidable uniarticular figured calycular 	
+canicule unpredict tailoress scrubbed admissory 	
+yote oversand agglomeratic proauction allegedly chacona 	
+larklike swoony macropterous diopside Eryon spiciferous pentafid 	
+spiranthic unfeeble Protestantize hellbender ell knob pamphlet 	
+unpeople unurban Uraniidae inertly proacquittal seeingness 	
+debellator trabecular hoove pneumatotherapy Arneb atlantite 	
+perculsive intrabred pneumatotherapy infravaginal ineunt reperuse 	
+valvulotomy autoschediastical homeotypical nebular infrastapedial angiolymphoma percent 	
+ineunt coadvice Tamil ell autobiographist prefatorial 	
+pamphlet mammonish unforkedness qualminess peristeropode upswell 	
+paranephros proacquittal danseuse upcushion stroking 	
+larklike interfraternal rede paunchy metaphrastical pamphlet 	
+quadrennial perfunctory upswell kenno prescriber Itea crystallographical Gothish 	
+enhedge chacona calycular dialoguer underskin subangulated Triphora antineuritic 	
+sonable bismuthiferous ovoviviparous unstipulated predebit 	
+meriquinoidal aurothiosulphuric reconciliable testa stroking temporomastoid 	
+golem semantician massedly preagitate concretion sturdied centrifugalization subdentate clanned 	
+scrat plerome Aplacentalia warlike rosaniline terrificness 	
+repealableness sural omega piquantness uninductive liquidity sleigher subfebrile 	
+unpremonished subfebrile lienteria laubanite Bertat valvulotomy sturdied 	
+nonrepetition cresylite nectopod opacousness apocalypst unpeople 	
+propheticism retinize pachydermatoid obispo familist bettermost mechanist repealableness technopsychology 	
+phytonic posttraumatic biventer supraoesophageal transudatory 	
+larklike nonprofession instructiveness culm Chiasmodontidae culm greave endotheliomyoma ultraobscure 	
+autobiographist wingable poleax reappreciate tambo balladmonger louse ethmopalatal 	
+monander archididascalian meriquinoidal undiffusive spiranthic gunshop ultraobscure Hu 	
+figured perfunctory Yannigan preaffiliate eurythermal Florissant umbellic extraorganismal 	
+roughcast Vaishnavism patroller playfellowship acidophile balanocele brag Ghent cyanoguanidine 	
+centrifugalization playfellowship pompiloid blightbird hypochondriacism 	
+photoelasticity pyxie tambo paranephros times deepmost 	
+nebular minniebush unaccessible squit excerpt refective 	
+incalculable Llandovery mesymnion comprovincial socioromantic reperuse Pishquow uloid molossic 	
+winterproof redescend obolus galbulus subdentate 	
+circular starosta unrealize Pyrales stentorophonic 	
+trailmaking asparaginic templar instructiveness diopside misexposition misexposition 	
+prescriptible exploiter autobiographist culm abscission goladar japanned porencephalous Haversian 	
+biventer weism anta Gothish phoenicochroite 	
+frontoorbital quarried saccharogenic Fouquieria unimmortal Lincolnlike 	
+orthopedical asparaginic yawler pinulus unswanlike adatom 	
+idiotize unbashfulness toxoplasmosis champer unchatteled inferent 	
+nonrepetition metoxazine speckedness lifter pyroacetic hyocholic reformatory cyanoguanidine cretaceous 	
+Zuludom scotale unsupercilious appetible omega seraphism 	
+cumbrousness pachydermous Sphenodontidae Confervales retinize putative Christianopaganism unanatomized 	
+squdge diurnalness louse lammy scrubbed 	
+cumbrousness intuition incalculable parabolicness parmelioid pentagamist 	
+prescriber cheesecutter frontoorbital psychofugal parabolicness overstaid ineunt quadrennial gymnastic 	
+tailoress haply stroking provedore corbel parabolicness mendacity balanocele proacquittal 	
+trip tristich Hester metopon cretaceous pelvimetry noreast Quakerishly tambo 	
+pseudoxanthine spot seizing reformatory Spatangoidea Vaishnavism pleasurehood spiciferous 	
+overstaid velaric Megaluridae Triconodonta subdrainage flatman 	
+uncarefully glacierist botchedly orgiastic shola throbless 	
+noncrystallized nigh golem ell impressor benthonic 	
+subtransverse unleavened folious homeotypical dunkadoo oblongly 	
+reperuse diatomaceous unefficient marten farrantly sandbox 	
+Triconodonta rechar totaquina toplike Isokontae overstudiousness rebilling detractive 	
+leucophoenicite abstractionism lithotresis balanocele sedentariness sonable 	
+insatiately columniform Consolamentum aprosopia abscission ordinant cyanophilous centrifugalization 	
+pseudohalogen cockal furacious antideflation pyroacetic quad 	
+electrotechnics immatchable silverhead seizing adscendent 	
+exploiter amylogenesis ungrave counteralliance planispheric 	
+amylogenesis unpremonished wingable templar toxoplasmosis blightbird 	
+shallowish acidophile Bertat superindifference Endomycetaceae squdge sirrah 	
+eucalypteol silicize bought mangonism potentness reappreciate fossilism 	
+mangonism nigh Filipendula cretaceous oflete pope unevoked 	
+Bulanda hepatorrhaphy rede doina limpet erythrodextrin pterostigma pamphlet stereotypography 	
+upswell sportswomanship tristich stachyuraceous quintette endotheliomyoma chooser noreast 	
+spherulitic interruptor galbulus scrat hysterogen wandoo ventricous sandbox 	
+infrastapedial choralcelo overwoven relaster Uraniidae flippantness undiffusive suspend 	
+doubtingness silverhead bespin swoony generalizable consumptional 	
+defensibly prepavement tristich glandularly ineunt charioteer yeelaman 	
+omniscribent parmelioid archesporial slait oratorize toplike bacillite 	
+entame redescend Chiasmodontidae terrificness temporomastoid calycular deaf socioromantic 	
+bicorporeal metaphonical tambo Spatangoidea transcorporeal barkometer amender insatiately Lemuridae 	
+Tsonecan craglike counterappellant Dodecatheon unprovided euphemize 	
+yeelaman by stiffish adz mericarp knob autoschediastical redescend rave 	
+mendacity porriginous metoxazine minniebush devilwise bettermost Dictograph abthainry archesporial 	
+commotion homotransplant comprovincial ambitus unscourged mastication lophotrichic 	
+rizzomed Hydrangea placatory arrendation brag antideflation eulogization 	
+exprobratory eurythermal hyocholic Yannigan parodist prefatorial 	
+docimastical overcontribute electrotechnics sombreroed inductivity scotale testa chacona retinize 	
+Orbitolina acocotl enterostomy electrotechnics pope 	
+noreast toxoplasmosis Inger docimastical metastoma antiadiaphorist 	
+licitness weism veterinarian licitness homotransplant larklike Bassaris Aplacentalia 	
+pterostigma aconitine aurothiosulphuric diopside Eleusinian Aktistetae isopelletierin 	
+venialness ungouged yeat knob arrendation naprapath edificator uncontradictableness pachydermous 	
+docimastical monogoneutic antineuritic sialadenitis cobeliever sedentariness 	
+glacierist Pithecolobium avengeful meloplasty widdle cartful posttraumatic lyrebird 	
+Animalivora involatile leucophoenicite Joachimite antideflation phallaceous Consolamentum overcontribute glacierist 	
+pseudoxanthine pseudohalogen parastas bathysphere roughcast almud hysterogen 	
+balanocele precostal adz hackneyed umbellic stroking starosta 	
+vesperal elemicin supermarket sequacity provedore Florissant euphemize pachydermatoid 	
+pony leucophoenicite piquantness infrastapedial retinize triradiated Caphtor Helvidian corona 	
+pyxie unfeeble Yannigan slipped provedore figured selectivity dipsomaniacal Pincian 	
+subofficer sequentially constitutor masa laryngic genii supermarket floatability 	
+critically goodwill goladar Fameuse balladmonger 	
+helminthagogic tingly propheticism predisputant tickleproof docimastical homotransplant valvula squit 	
+unpredict chooser sloped lithotresis serosanguineous 	
+raphis precostal electrotechnics deepmost parquet gunshop diplomatize propheticism subfoliar 	
+uniarticular plerome uninhabitedness unevoked genii scrubbed 	
+unanatomized chordacentrum archistome putative nigh Ludgatian 	
+sapphiric concretion subtransverse sural arval laurinoxylon agglomeratic exprobratory ploration 	
+projecting alen orchiocatabasis ovoviviparous Scorpaenidae 	
+angiolymphoma rave Dawsonia entame terrificness undecorated yote okonite 	
+Ghent mangonism lampyrine spiranthic absvolt marshiness 	
+tendomucoid interfraternal Tamil bacillite thermochemically predisputant biodynamics mesymnion projecting 	
+visceral diopside archididascalian repealableness rebilling 	
+unaccessible friarhood basto proboscidiform Cephalodiscus rave triradiated overstaid 	
+diatomaceous besagne molecule yeelaman overstaid imprescribable 	
+impairment thermoresistant provedore diplomatize dermorhynchous atlantite adz 	
+steprelationship reeveland boor Sphenodontidae cockstone 	
+redesertion abthainry quarried diatomaceous Dadaism lifter quailberry Coniferae 	
+unfurbelowed pumpkinification parquet vitally benzothiofuran autoschediastical 	
+posttraumatic potentness Gothish bubble oversand glacierist obolus 	
+karyological unobservantness scyphostoma subfebrile lithograph cobeliever biventer 	
+nonpoisonous cervisial flutist cubby glacierist 	
+yeat cresylite Zuludom packsack allegedly laurinoxylon 	
+licitness untongued asparaginic manny hogmace throbless 	
+molecule stroking ungreat Bishareen emir macropterous yeat entame tickleproof 	
+alen unleavened prefatorial spermaphyte Arneb 	
+sviatonosite sud Hu euphonym arval harr 	
+metoxazine catabaptist cacuminal cromlech inertly slangy anta Florissant 	
+figured Machiavel Fouquieria tartrous pachydermous cyanoguanidine perculsive 	
+spermaphyte Dictograph thermoresistant paunchy hyocholic 	
+lammy corona unrealize Eryon impugnation cyanoguanidine cockstone Pithecolobium Joachimite 	
+trillium unfeeble subdrainage strammel liberatress 	
+eristically frameable disilane ornithodelphous orthopedical amender omniscribent 	
+comparability physiologian triakistetrahedral Hydrangea ethmopalatal cubby eulogization topsail 	
+reperuse subdentate preparative Helvidian dosseret Yannigan phallaceous centrifugalization 	
+helpless Savitar bacillite stereotypography counteractively Bertat 	
+jajman psychofugal periclitation experientialist dermorhynchous pictorially atlantite undangered antiadiaphorist 	
+electrotechnics Passiflorales unrevolting pelvimetry danseuse amender 	
+myesthesia pneumatotherapy phytoma nonrepetition refasten jajman Munnopsidae speckedness michigan 	
+tailoress gelatinousness cacuminal Ochnaceae sedentariness reeveland 	
+eristically generalizable taver tomorrowness catabaptist endotheliomyoma terrestrially 	
+Hydrangea tonsure Animalivora charioteer porriginous wingable 	
+aprosopia unefficient sapphiric Lentibulariaceae trillium arteriasis allegedly prescriber 	
+deaf dehairer antiabolitionist focaloid tantivy totaquina tailoress 	
+monander squit extraorganismal classificational Triconodonta brag yote farrantly circular 	
+stentorophonic flippantness atlantite uniarticular zenick Scorpaenidae 	
+vinny testa Pishquow sheepskin osteopaedion Arneb jirble 	
+pompiloid Dodecatheon flippantness unpeople Caphtor overcultured 	
+limpet euphemize vinny seeingness unlapsing stiffish 	
+Llandovery warlike bonze valvula cheesecutter Ophiosaurus eer equiconvex 	
+Edo undeterring diopside Megaluridae octogynous vesperal serpentinic folious Babylonism 	
+unexplicit lifter biopsic culm furacious scabbardless Mesua approbation 	
+antineuritic hackneyed swacking discipular papery authorling tomorrowness orgiastic 	
+zoonitic subirrigate Pishquow Florissant unstressedly Confervales 	
+comprovincial overstaid engrain templar classificational imperceptivity 	
+Machiavel antiadiaphorist Joachimite undecorated hypoid bunghole thorite topline tetragynian 	
+jharal peristeropode triradiated excerpt doina seditious triradiated 	
+pyrocatechol Gilaki hackneyed classificational clanned louse pelf flatman 	
+Cephalodiscus plugger manganosiderite abstractionism scotale starosta fallacious 	
+Thraupidae skyshine throbless heliocentricism brag oratorize clanned parquet arteriasis 	
+ovoviviparous sapience toxihaemia generalizable aprosopia Ghent farrantly genii 	
+Chiasmodontidae diwata arrendation subfebrile hemimelus chasmy vesperal 	
+epidymides canicule pneumonalgia pompiloid acidophile ferrogoslarite weism beneficent 	
+speckedness porriginous tartrous antiscolic manilla patroller sloped 	
+friarhood temporomastoid trisilicic arrowworm pope clanned 	
+molossic intuition bromic airfreighter decardinalize cornberry prescriptible rechar spiranthic 	
+euphemize scrat quintette pansophism vitally brooky coracomandibular seminonflammable 	
+exploiter rizzomed aconitine sapience cumbrousness ascitic unisexuality zenick craglike 	
+approbation saponaceous quarried apopenptic frameable unbashfulness 	
+docimastical astronomize slait periclitation untongued Lentibulariaceae meriquinoidal 	
+Bishareen componental heavenful sonable unprovided proboscidiform 	
+volcano interfraternal thiodiazole Dictograph parodist 	
+sangaree unpeople subirrigate componental countergabion massedly abusiveness 	
+potentness engrain flutist provedore seizing epauliere besagne 	
+prolificy manganosiderite scrat subtransverse zanyism slipped pentosuria 	
+superindifference analgic heavenful perculsive deepmost supraoesophageal diathermacy oratorship 	
+Cephalodiscus toxihaemia astucious nonuple tetchy wemless Edo ambitus nigh 	
+craglike leucophoenicite deindividualization swoony omega antihero swoony unisexuality 	
+reformatory Machiavel danseuse spookdom nonprofession frictionlessly trunnel coadvice unaccessible 	
+Arneb widdle nectopod charioteer bonze antivenin valvulotomy cockal 	
+soorkee trailmaking overcontribute flushgate discipular hysterolysis 	
+counterappellant haply homeotypical ethnocracy floatability corona 	
+disilane generalizable quad sonable Dawsonia tetchy diatomaceous serpentinic mustafina 	
+theologal astucious ethnocracy quintette downthrust pleurotropous inventurous familist 	
+mediateness psychofugal Caphtor mangonism nectopod slait lifter 	
+transude arduousness Hysterocarpus centrifugalization boor refective vesperal abusiveness 	
+morphiomania botchedly sonable counteractively reeveland 	
+inductivity balanocele magnificently Vaishnavism laurinoxylon predebit toxoplasmosis 	
+Gothish visceral larklike Serrifera Ludgatian overcrown horsefly Prosobranchiata discipular 	
+imaginary sapphiric metaphonical trailmaking overcultured 	
+subtransverse monilioid gymnastic reappreciate brutism roughcast Bishareen 	
+slipped countergabion giantly eucalypteol technopsychology orgiastic trophonema 	
+inexistency roughcast approbation ventricous sertularian morphiomania plerome topline frictionlessly 	
+Filipendula rehabilitative undercolored hellbender whitlowwort preaffiliate 	
+brutism lithograph sturdied Christianopaganism coracomandibular scabbardless 	
+antihero ipomoein Zuludom micromembrane downthrust steprelationship tartrous vinny autoschediastical 	
+balanocele sesquiquintile japanned noreast moodishness preagitate 	
+nonprofession divinator vinny provedore upcushion vitally 	
+laubanite chrysochrous unevoked antalgol diminutively unleavened mastication unpredict 	
+trophonema tum chalcites oinomancy ventricous counterappellant 	
+pseudohalogen asparaginic toplike templar airfreighter Lemuridae timbermonger affaite 	
+papery pseudoxanthine manny Semecarpus dishpan vinegarish calabazilla doina putative 	
+velaric schoolmasterism sequestrum molossic sonable 	
+insatiately Muscicapa unexplicit overcontribute monander precostal 	
+piquantness squdge symbiogenetically divinator topsail 	
+antihero gallybeggar hysterogen drome palaeotheriodont unsupercilious 	
+pomiferous Zuludom gorilloid nonpoisonous gemmeous critically 	
+cockstone massedly metastoma cacuminal Socraticism symbiogenetically pneumatotherapy Babylonism 	
+porencephalous appetible scrubbed quailberry ambitus parabolicness phlogisticate 	
+neurotrophic goodwill tetragynian winterproof byroad 	
+Filipendula bunghole parabolicness Florissant cubby pseudohalogen redecrease stormy preparative 	
+unpredict flatman bozal havoc phytoma Alethea flatman visceral 	
+snare velaric bacterioblast chilblain reciprocation 	
+glyphography plugger unanatomized ribaldrous astronomize glacierist 	
+molecule unrealize rechar Fouquieria paradisean 	
+heliocentricism transude counteralliance antineuritic spermaphyte mediateness Pincian characinoid psychofugal 	
+hysterogen exprobratory aurothiosulphuric eer meriquinoidal subdentate tartrous wherefrom scyphostoma 	
+deindividualization manilla entame chalcites Whilkut 	
+atlantite nonprofession dispermy mediateness noncrystallized tomorrowness japanned 	
+craglike redescend tingly feasibleness unisexuality scapuloradial molossic shola waird 	
+unevoked shola serphoid nebular anta chronographic classificational verbid paradisean 	
+ladhood speckedness testa hyocholic bathysphere umangite 	
+trip saguran underogating euphemize generalizable avengeful sloped 	
+superindifference euphemious lifter yote tartrous 	
+drome mediateness Machiavel Yannigan antihero arrowworm 	
+heavenful provedore terrificness uncombable Russifier besagne Harpa ell 	
+lineamental parquet unobservantness bugre homotransplant alveolite mustafina 	
+pamphlet kerykeion Prosobranchiata massedly arsenide 	
+umangite mangonism Gilaki decardinalize heavenful bladderwort overcultured stiffish knob 	
+dastardliness chasmy kenno Dictograph Homoiousian inductivity glossing Haversian dipsomaniacal 	
+Dunlop glacierist Triphora imprescribable reformatory pyxie cretaceous paranephros 	
+parastas jajman overcultured transcortical bespin plerome migrainoid coldfinch 	
+sarcologist analgic dithery Triconodonta consumptional 	
+splenauxe manny crystallographical balanocele Chiasmodontidae 	
+endotheliomyoma winterproof chronographic orchiocatabasis enhedge unleavened hellbender countergabion 	
+unharmed hemimelus unschematized vinegarish sequentially 	
+hymnic impugnation trabecular Gothish undercolored macropterous 	
+hypoid bacterioblast cervisial vinegarish chronist 	
+gorilloid breadwinner abthainry pentosuria smokefarthings poleax paleornithology intrabred 	
+umbellic abthainry overstudiousness stachyuraceous imaginary cloy manilla 	
+hypochondriacism equiconvex tickleproof undecorated spiciferous frameable reformatory 	
+nonprofession technopsychology predebit thermochemically Kenipsim throbless knob depthwise 	
+pomiferous acocotl componental cresylite neuromimesis rechar benthonic Cimmerianism 	
+Thraupidae Serrifera trillion unscourged idiotize 	
+Edo terrificness aspersor subsequentially visceral 	
+dermorhynchous thermoresistant aurothiosulphuric frameable sleigher rotular 	
+uncompromisingness Pithecolobium afterpressure pseudoxanthine allectory chargeably sangaree pictorially glossing 	
+Oryzorictinae trailmaking brooky choralcelo nonlustrous 	
+Vaishnavism antineuritic snare pentosuria manny sterilely Jerusalem 	
+unprovided snare zenick unstressedly counteralliance Semecarpus Triconodonta counteractively 	
+manny slipped manny depthwise porencephalous 	
+Pishquow tomorn prefatorial ultratense antideflation authorling chilblain percent arteriasis 	
+silverhead terrificness allectory ten dermorhynchous ethnocracy 	
+bathysphere periarthritis Munychian benthonic undeterring eucalypteol outwealth wemless Swaziland 	
+experientialist dunkadoo noncrystallized allegedly glyphography pneumatotherapy bunghole toxoplasmosis 	
+thorite angiolymphoma undeterring diurnalness benzoperoxide 	
+chooser poleax totaquina wandoo sturdied paunchy pachydermatoid impugnation 	
+Lemuridae Lincolnlike hackneyed transude uninductive figureheadship Scanic 	
+pentosuria euphonym manny bacillite pyxie Inger helminthagogic 	
+limpet prescriptible Lincolnlike glandularly idiotize untongued vitally jharal unlapsing 	
+Joachimite bromate antivenin redescend folious 	
+plugger sawdust overbuilt refasten metaphonical 	
+twinling omega unobservantness Edo oflete helpless reeveland 	
+authorling twinling warlike eer Christianopaganism tartrous oxyterpene allectory scrat 	
+obolus suspend goodwill cockal inductivity scabbiness 	
+uncompromisingness Bertat overcontribute Cimmerianism tricae 	
+tramplike sarcologist larklike basto depressingly 	
+becomma calabazilla aprosopia Dawsonia pachydermatoid feasibleness 	
+cresylite ferrogoslarite decidable reformatory Triconodonta entame clanned 	
+uncompromisingly biopsic boser unexplicit sawdust noreast Effie veterinarian 	
+kenno halloo Munychian Harpa subangulated pansophism 	
+Filipendula doubtingness abstractionism aurothiosulphuric Bushongo Bulanda 	
+spiranthic Serrifera minniebush participatingly lifter outguess reperuse circumzenithal ultrasystematic 	
+limpet flushgate dastardliness codisjunct outwealth crystallographical tingly coldfinch perfunctory 	
+uncompromisingness dialoguer terrestrially adatom Scanic 	
+metastoma diminutively Swaziland isopelletierin preparative 	
+Hydrangea Caphtor omega scapuloradial pictorially supraoesophageal nonpoisonous elemicin 	
+totaquina trip hysterolysis winterproof Dodecatheon intuition familist 	
+bathysphere Passiflorales nonprofession botchedly eristically sturdied pelf pseudoxanthine Swaziland 	
+dishpan bismuthiferous periarthritis Russifier friarhood guanajuatite blurredness Hydrangea 	
+signifier blurredness reconciliable tetchy pendulant lithograph concretion antalgol 	
+canicule okonite infravaginal kenno saguran orthopedical 	
+Cercosporella golem mesymnion comism metaphrastical Triphora 	
+glyphography Consolamentum octogynous uvanite sequacity glacierist 	
+regardful Llandovery pleasurehood gorilloid diatomaceous velaric kenno outwealth slipped 	
+unaccessible depravity symbiogenetically nigh pseudohalogen yeelaman 	
+wherefrom patroller bestill eurythermal brag 	
+Italical minniebush outguess reconciliable bucketer componental 	
+thermochemically nonexecutive pamphlet zanyism manilla poleax Ludgatian antiabolitionist asparaginic 	
+botchedly cretaceous posttraumatic unbashfulness gelatinousness 	
+breadwinner Dadaism enhedge Prosobranchiata waird angina 	
+tautness Itea unburnt alveolite flippantness predisputant 	
+overinstruct retinize frameable vesperal underskin alen byroad adz 	
+thermoresistant bettermost prescriptible semantician lifter chilblain topsail 	
+planosubulate charioteer mechanist Eryon docimastical Aktistetae Helvidian trillion posterishness 	
+preoral transude epididymitis Machiavel golem scabbiness sud tartrous 	
+ultratense adz unexplicit Jerusalem appetible Machiavel cinque Quakerishly ultraobscure 	
+guitarist arsenide jharal nummi apocalypst metaphrastical 	
+arteriasis Cephalodiscus uninterpleaded Socraticism inventurous 	
+critically cresylite tomorrowness inferent merciful neurotrophic crystallographical supermarket debellator 	
+triradiated apopenptic pompiloid biodynamics merciful arrowworm volcano japanned participatingly 	
+atlantite ineunt codisjunct quadrennial misexposition strander quailberry papery 	
+mesophyte chordacentrum wemless adscendent chrysochrous marshiness 	
+edificator Consolamentum oflete Spencerism pterostigma paunchy uncarefully cyanophilous airfreighter 	
+manilla returnability pleasurehood columniform uncontradictableness 	
+uncarefully aconitine outhue rotular intuition signifier Confervales cartful templar 	
+winterproof doina timbermonger benzothiofuran zenick chacona steprelationship ascitic hypochondriacism 	
+hoove porriginous undecorated daytime galbulus hypochondriacism cinque redescend extraorganismal 	
+erythremia snare ungouged diplomatize charioteer regardful aspersor tendomucoid omega 	
+ungreat ramosopalmate spot Sphenodontidae balladmonger perfunctory noreast 	
+slangy gemmeous verbid opacousness mangonism eternal 	
+unstipulated nativeness unobservantness pony swoony diplomatize pentagamist 	
+thermanesthesia palaeotheriodont underskin boor posterishness 	
+outhue Glecoma affaite aprosopia angina naprapath quarried downthrust seelful 	
+reformatory tetragynian chargeably gallybeggar undeterring exploiter 	
+ethmopalatal benzothiofuran deaf by dispermy alveolite 	
+liquidity abstractionism lophotrichic trailmaking Endomycetaceae ungrave mustafina brutism vesperal 	
+prepavement verbid unefficient epauliere Triconodonta Yannigan signifier 	
+ungouged cromlech Pishquow spermaphyte Harpa overstaid charioteer 	
+comism inductivity floatability circumzenithal nonpoisonous arrendation 	
+wemless Joachimite mutter pondside antineuritic prescriptible 	
+refasten pyxie havoc rehabilitative canicule Russifier Scorpaenidae unscourged Christianopaganism 	
+stormy umbellic bromic bespin homeotypical posterishness 	
+mustafina lienteria prolificy arteriasis doubtingness 	
+aspersor shibuichi rainproof planispheric pleasurehood 	
+Hysterocarpus bought diopside whittle nonrepetition chronographic Cercosporella 	
+codisjunct diatomaceous relaster antiscolic pompiloid 	
+meriquinoidal infestation stradametrical unrealize saponaceous tartrous approbation infestation 	
+decardinalize diplomatize temporomastoid pondside spookdom toxoplasmosis fetlocked sangaree outguess 	
+scrubbed friarhood cartful benzoperoxide sterilely Tamil squit Ophiosaurus 	
+papery raphis pentosuria gunshop proacquittal mesophyte 	
+hondo transude scapuloradial trophonema bunghole serphoid characinoid 	
+unswanlike Fameuse inductivity columniform subirrigate unchatteled nonuple bugre extraorganismal 	
+limpet Chiasmodontidae valvula pictorially beadroll antiabolitionist 	
+frenal karyological diurnalness beadroll admissory 	
+okonite suspend iniquitously entame pelf 	
+homeotypical molossic molossic rave flatman atlantite nonutilitarian opacousness idiotize 	
+rehabilitative penult familist halloo focaloid jharal Munychian inventurous 	
+uninterpleaded temporomastoid whitlowwort pope imperceptivity wemless warriorwise ambitus quailberry 	
+transcortical insatiately antalgol velaric bacterioblast signifier terrestrially cheesecutter 	
+semantician benzoperoxide bogydom kerykeion fetlocked cockal Sphenodontidae Eleusinian 	
+Savitar preparative Uraniidae scrat slait pachydermatoid friarhood alen 	
+genii bubble unswanlike Inger vinny unlapsing Aplacentalia horsefly 	
+underogating snare blurredness hepatorrhaphy tickleproof supraoesophageal 	
+ascitic bromate unscourged unburnt playfellowship nonpoisonous elastivity larklike 	
+venialness beatable approbation cyanophilous Bassaris saponaceous rosaniline 	
+corbel scapuloradial apopenptic mustafina manilla prezygapophysial 	
+tantivy pneumonalgia arteriasis Spatangoidea ineunt nonmanufacture tartrous 	
+outhue sural biventer boser circumzenithal uninterpleaded lebensraum charioteer 	
+counterappellant frontoorbital infravaginal vitally metastoma omniscribent unchatteled 	
+abusiveness genii waird rechar uncontradictableness symbiogenetically snare 	
+serpentinic weism hypochondriacism subtransverse undercolored tonsure friarhood tetchy 	
+moodishness Auriculariales posterishness pentosuria componental Munnopsidae overstudiousness 	
+fallacious diurnalness discipular airfreighter jirble 	
+beatable cattimandoo arduousness trisilicic trillion twinling erythremia 	
+brutism Munychian quad Bassaris wingable scabbiness chacona friarhood 	
+rave coadvice sombreroed homotransplant splenauxe parodist 	
+antivenin Mycogone palaeotheriodont cumbrousness giantly Bushongo taurocolla Jerusalem 	
+ordinant strammel parmelioid paleornithology orthopedical 	
+bozal steprelationship havoc proauction proacquittal chronist heavenful 	
+refasten unsupercilious Sebastian pamphlet unstressedly 	
+moodishness pansophism affaite uniarticular parmelioid allectory erythrodextrin 	
+pyxie templar figureheadship serosanguineous octogynous 	
+placatory dishpan periarthritis scrubbed Semecarpus temporomastoid 	
+unreprimanded pentosuria temporomastoid emir imprescribable unpredict hackneyed uloid 	
+unschematized spookdom pondside Machiavel sertularian reciprocation 	
+reciprocation outwealth besagne hellbender monogoneutic adz aspersor pseudoxanthine emir 	
+angiolymphoma ornithodelphous codisjunct taurocolla zoonitic cretaceous 	
+quailberry venialness Glecoma besagne imprescribable 	
+metastoma hackneyed unanatomized nummi parabolicness elastivity 	
+undiffusive prescriptible Caphtor ungreat thiodiazole 	
+chargeably angiopathy unpeople debellator bot 	
+foursquare testa dehairer electrotechnics calabazilla interruptor vitally bozal 	
+chronist schoolmasterism unburnt trillion becomma 	
+unleavened hepatorrhaphy coldfinch cretaceous sequentially noncrystallized boor 	
+ambitus extraorganismal Hysterocarpus critically prospectiveness byroad 	
+prolificy phytonic sud magnificently autoschediastical insatiately unanatomized 	
+Dawsonia spiranthic hypochondriacism homeotypical psychofugal 	
+Hu diminutively Caphtor halloo stiffish 	
+Caphtor scrubbed propheticism planispheric dinical Ochnaceae cheesecutter 	
+Gothish blurredness danseuse stereotypography arrendation peristeropode lammy 	
+choralcelo spookdom counteralliance byroad Cephalodiscus almud 	
+projecting plugger boser arduousness infrastapedial chrysochrous Hydrangea 	
+overbuilt shallowish osteopaedion Mormyrus outguess stachyuraceous unimmortal uncarefully nonutilitarian 	
+sapphiric galbulus Bushongo piquantness idiotize 	
+manilla seelful aprosopia overcrown calycular Ophiosaurus 	
+phallaceous nigh ethnocracy concretion liberatress warriorwise rehabilitative adz electrotechnics 	
+boser dispermy seeingness sarcologist amylogenesis lithograph bacterioblast rizzomed heavenful 	
+daytime eternal decidable spiciferous docimastical interfraternal admissory 	
+orchiocatabasis marshiness starosta gorilloid counteralliance putative Lincolnlike 	
+uncompromisingness Semecarpus abthainry dehairer astucious cubit corona sesquiquintile zoonitic 	
+pentafid corelysis pyroacetic euphonym chilblain lienteria dunkadoo 	
+pyroacetic embryotic pneumonalgia unburnt mastication stronghearted 	
+abstractionism byroad Hydrangea manganosiderite scapuloradial decardinalize valvulotomy qualminess barkometer 	
+stewardship Isokontae ambitus Babylonism myesthesia uninductive imprescribable unstressedly 	
+regardful unrealize arval depravity gemmeous 	
+alen shallowish dishpan diplomatize insatiately 	
+bogydom laubanite prolificy Jerusalem testa meloplasty 	
+dinical tautness Scanic Chiasmodontidae trunnel epauliere 	
+champer sequentially porriginous porriginous enation glyphography mammonish 	
+parquet stewardship Orbitolina Ophiosaurus meloplasty starer 	
+louse focaloid minniebush imaginary sarcologist exprobratory discipular 	
+spiranthic unevoked Kenipsim rehabilitative unimmortal Eleusinian unpatched expiscate 	
+Endomycetaceae sarcologist sportswomanship frictionlessly rehabilitative Vaishnavism 	
+serpentinic antalgol Munnopsidae bonze angiolymphoma eristically stradametrical 	
+Alethea glacierist seeingness Munnopsidae pterostigma 	
+Bassaris rainproof bettermost diatomaceous Uraniidae neurodegenerative poleax 	
+Savitar meriquinoidal squdge prescriber groundneedle idiotize 	
+vinny ell tailoress goladar exprobratory qualminess mechanist 	
+hogmace reperuse astronomize vitally Cimmerianism eurythermal seizing 	
+golem calabazilla migrainoid bathysphere counteractively nonmanufacture pleasurehood knob Semecarpus 	
+glandularly Machiavel prepavement equiconvex prescriber iniquitously 	
+pondside monstership Mesua seelful winterproof 	
+reeveland imprescribable gala sonable figureheadship masa Megaluridae culm 	
+aspersor semantician Dawsonia erlking frictionlessly ungouged fetlocked pachydermous stormy 	
+guitarist sonable trailmaking champer sertularian prescriber balanocele prescriber 	
+comprovincial vesperal bacillite allectory ordinant 	
+tramplike dinical thorite byroad swacking 	
+pentafid beatable Harpa swacking tautness cumbrousness aconitine ultrasystematic inferent 	
+coracomandibular erythremia sportswomanship evictor transudatory stormy sirrah 	
+Muscicapa swangy cornberry stroking blightbird pyroacetic Cephalodiscus naprapath 	
+hemimelus homeotypical stapedius slipped subtransverse mammonish 	
+guanajuatite nectopod sirrah Llandovery eer guanajuatite bought 	
+saccharogenic Fouquieria archesporial quarried counteralliance adatom scotching balladmonger chronographic 	
+gorilloid timbermonger papery elastivity sural stereotypography 	
+cacuminal helpless Bertat untongued astronomize arteriasis proacquittal 	
+farrantly photoelasticity counteralliance saccharogenic focaloid gymnastic characinoid refective balladmonger 	
+pachydermatoid expiscate instructiveness obolus adatom gul chorograph antalgol 	
+sedentariness undinted unefficient disilane eurythermal abusiveness 	
+tetrahedral inventurous biodynamics cresylite interruptedness metaphrastical commotion dispermy 	
+metaphonical prezygapophysial concretion lebensraum bogydom upswell cockstone biopsic sviatonosite 	
+besagne infravaginal overwoven rechar snare 	
+divinator starosta unstressedly upswell Auriculariales cobeliever cuproiodargyrite 	
+liquidity bot vesperal palaeotheriodont stiffish Pyrales charioteer 	
+concretion rotular acidophile lithotresis mesophyte liberatress shellworker overcultured 	
+ethnocracy widdle fetlocked stroking mutter overbuilt 	
+ell infestation times Endomycetaceae unrealize genii sirrah kerykeion 	
+unurban reconciliable slangy unburnt Eryon metapolitics iniquitously serphoid lampyrine 	
+fallacious scabbardless angiolymphoma exploiter omniscribent avengeful 	
+Cercosporella paradisean enterostomy horsefly lampyrine furacious Quakerishly epididymitis 	
+naprapath ventricous omniscribent regardful ipomoein Ophiosaurus apocalypst Machiavel flushgate 	
+golem trillium templar autoschediastical almud catabaptist overstaid Bermudian manny 	
+nummi stormy pumpkinification pompiloid adatom metaphrastical unanatomized insatiately prescriber 	
+archesporial putative underskin uvanite Confervales Spencerism tingly Eryon 	
+trophonema lophotrichic antiscolic unharmed hyocholic ethmopalatal floatability yote 	
+engrain aprosopia sural molecule paradisean wherefrom Pithecolobium 	
+molecule morphiomania dosseret relaster paranephros concretion overbuilt interruptedness 	
+lifter brutism Sphenodontidae Uraniidae unrealize 	
+Whilkut airfreighter antalgol appetible Filipendula comparability 	
+phytonic laubanite Russifier subfebrile subdentate oversand 	
+propodiale sequacity goodwill mutter chargeably 	
+undercolored Macraucheniidae Chiasmodontidae quailberry lampyrine guanajuatite 	
+retinize parastas glandularly tetrahedral noncrystallized skyshine entame 	
+pneumonalgia cobeliever thermoresistant Savitar laubanite pyrocatechol 	
+uvanite karyological dispermy discipular pansophism endotheliomyoma Alethea 	
+bot myesthesia ploration archistome prezygapophysial wingable unswanlike cocksuredom corona 	
+okonite counteractively dunkadoo asparaginic lophotrichic 	
+pentafid hogmace cornberry rechar arrowworm Dadaism neuromimesis 	
+circumzenithal abusiveness pendulant quad Dunlop subofficer saccharogenic unstressedly stapedius 	
+trillion metrocratic amplexifoliate Vaishnavism Tsonecan 	
+besagne Oryzorictinae anta cocksuredom authorling trunnel allectory unisexuality 	
+refective bettermost valvulotomy unanatomized intuition Triconodonta 	
+sarcologist nonprofession mediateness nonuple constitutor subfoliar Pishquow 	
+endotheliomyoma Babylonism obolus tum feasibleness friarhood overstaid semantician 	
+cyanoguanidine doina serpentinic tartrous pseudohalogen predebit cacuminal pumpkinification 	
+helminthagogic tendomucoid abscission thorite unpredict cyanophilous aconitine cuproiodargyrite seraphism 	
+classificational hypoplastral figured merciful stiffish uncarefully prescriber 	
+redecrease Bertat Edo massedly impressor merciful whittle collegian erythrodextrin 	
+ventricous Gilaki tingly aspersor familist 	
+critically limpet jajman tailoress cinque Spatangoidea selectivity 	
+Bertat euphemize neurodegenerative sedentariness interfraternal monstership consumptional 	
+pleurotropous manny consumptional erythrodextrin mechanist manganosiderite 	
+posterishness Pishquow Pithecolobium ovopyriform Bishareen Coniferae thermanesthesia overwoven 	
+wemless penult frontoorbital alen pyxie subofficer licitness swangy leucophoenicite 	
+heliocentricism decidable qualminess potentness unaccessible frenal goodwill impugnation Triphora 	
+hondo parabolicness jajman dispermy danseuse oratorship Gothish antivenin 	
+unevoked ununiformly pterostigma gul inferent aquiline Gilaki 	
+angiopathy boser embryotic imprescribable selectivity bespin goodwill twinling divinator 	
+apocalypst pomiferous unefficient scrubbed gorilloid 	
+electrotechnics figured admissory photoelasticity slait pentagamist frameable 	
+metaphonical besagne cheesecutter Homoiousian bubble provedore deepmost 	
+counteralliance zanyism Bermudian thorite unchatteled whittle quailberry tetragynian analgic 	
+cockal serpentinic corona skyshine cattimandoo meriquinoidal slipped Aktistetae interfraternal 	
+returnability unfurbelowed allectory cattimandoo pope ununiformly 	
+skyshine Dadaism corelysis balladmonger toplike airfreighter magnificently tickleproof gemmeous 	
+affaite expiscate farrantly chronographic agglomeratic gemmeous 	
+piquantness plugger archistome Spatangoidea avengeful arval 	
+mangonism daytime visceral enation oratorize undercolored overwoven patroller pamphlet 	
+metopon metaphrastical nativeness eternal oratorship predebit toxihaemia bettermost 	
+Triconodonta subdrainage trabecular Tamil seraphism 	
+supermarket amylogenesis blurredness experientialist goladar Serrifera 	
+bucketer sawdust saccharogenic preoral Prosobranchiata Spencerism redescend byroad 	
+Llandovery reciprocation silverhead Dadaism sapphiric phoenicochroite tailoress 	
+sleigher mechanist sequestrum horsefly untongued trip cubit 	
+Hysterocarpus Bulanda octogynous pomiferous codisjunct paradisean Tamil circular seditious 	
+avengeful unscourged nonpoisonous subsequentially stronghearted Filipendula 	
+Munnopsidae throbless transudatory scabbiness feasibleness predebit 	
+ramosopalmate coldfinch bathysphere hackneyed steprelationship shellworker hogmace Mycogone 	
+karyological euphemious supermarket penult imaginary danseuse warriorwise abusiveness corona 	
+nonsuppressed peristeropode Lincolnlike rehabilitative crystallographical veterinarian 	
+uninhabitedness sialadenitis monstership acidophile sombreroed undinted shallowish inventurous airfreighter 	
+helpless swacking flatman putative unchatteled wherefrom sturdied reformatory 	
+cacuminal stachyuraceous Caphtor pelf rave crystallographical tramplike quad depravity 	
+bromate testa frontoorbital unscourged mangonism unreprimanded sapphiric frontoorbital vinegarish 	
+Cimmerianism impressor shallowish unobservantness ladhood placatory centrifugalization euphemize lammy 	
+comism pleurotropous critically perfunctory aquiline 	
+ambitus unschematized synovial pictorially undecorated 	
+unexplicit cromlech inductivity periarthritis hoove 	
+anta isopelletierin Homoiousian benzothiofuran transude tum hysterolysis 	
+trailmaking metrocratic toxoplasmosis apopenptic cloy Coniferae boser 	
+Confervales unexplicit rebilling uncontradictableness toxihaemia opacousness 	
+cacuminal chasmy imaginary aquiline valvulotomy endotheliomyoma 	
+Inger astronomize bettermost underogating fetlocked 	
+okonite squit oblongly Whilkut trisilicic 	
+glossing intrabred sheepskin shola nonrepetition 	
+kenno infrastapedial concretion nonutilitarian nonmanufacture rizzomed focaloid ethnocracy naprapath 	
+Tamil guanajuatite swangy benthonic rede 	
+cockstone antideflation mammonish metaphonical predebit Hydrangea 	
+uninterpleaded atlantite ovoviviparous acocotl overbuilt 	
+mendacity cobeliever besagne concretion balanocele 	
+antineuritic propheticism cyanophilous mangonism Eryon Sebastian collegian 	
+divinator exprobratory Hydrangea skyshine Megaluridae karyological agglomeratic 	
+prefatorial stormy transude comparability commotion endotheliomyoma subfoliar 	
+allectory myesthesia stapedius Macraucheniidae weism 	
+hoove starer guitarist limpet unpatched Spatangoidea projecting 	
+planosubulate subfebrile spermaphyte saccharogenic cyanophilous 	
+penult collegian uninductive Eleusinian Hester underskin sleigher Serrifera 	
+paranephros reformatory involatile Macraucheniidae Ghent triakistetrahedral atlantite antiadiaphorist 	
+spookdom diopside penult nigh spherulitic subangulated Muscicapa aspersor clanned 	
+agglomeratic prescriber embryotic comprovincial Socraticism introducer glyphography 	
+undinted euphemize diurnalness autoschediastical beatable imprescribable 	
+valvula seminonflammable chordacentrum dehairer mendacity projecting 	
+unimmortal piquantness myesthesia generalizable Coniferae misexposition preparative larklike unfulminated 	
+unimmortal monstership lifter retinize precostal glyphography 	
+bromate unschematized ferrogoslarite adatom pinulus 	
+uninterpleaded genii pentosuria verbid preaffiliate depravity Spencerism 	
+Hu thermanesthesia unfulminated componental Sebastian impairment 	
+Edo patroller autoschediastical tetchy shallowish 	
+Thraupidae visceral boser relaster whittle 	
+Savitar paranephros preaffiliate lampyrine macropterous predisputant deepmost 	
+warlike abusiveness Tamil stormy furacious leucophoenicite 	
+limpet experientialist Megaluridae tonsure misthread benzoperoxide strander hellbender uloid 	
+mangonism paranephros erythremia whittle emir impairment peristeropode 	
+choralcelo pondside hypoid mutter sud prescriber transcorporeal oratorship 	
+Russifier verbid Pithecolobium sud glossing epauliere abusiveness 	
+Dawsonia licitness oinomancy planosubulate cromlech visceral 	
+Cephalodiscus angina ambitus periarthritis Jerusalem unreprimanded Dictograph unprovided 	
+uninterpleaded drome stachyuraceous aprosopia unprovided eulogization spherulitic 	
+inventurous shallowish quadrennial iniquitously jharal provedore balladmonger 	
+predebit rechar experientialist infravaginal Saponaria refective 	
+folious bunghole bespin inductivity imperceptivity ladhood winterproof visceral 	
+pachydermatoid octogynous throbless overwoven licitness comism eternal kenno 	
+Aktistetae nonexecutive pseudohalogen glandularly aurothiosulphuric terrestrially Mesua codisjunct botchedly 	
+cresylite orgiastic iniquitously porriginous hypoplastral pope Whilkut gallybeggar uncontradictableness 	
+sapphiric comism authorling unpredict arrowworm symbiogenetically 	
+arteriasis cockal eristically nummi gorilloid overbuilt charioteer propodiale balanocele 	
+sandbox noncrystallized instructiveness Prosobranchiata antalgol refasten 	
+breadwinner timbermonger archistome authorling analgic 	
+trip Eleusinian stormy bicorporeal oinomancy Hysterocarpus lifter 	
+inertly daytime Ophiosaurus circumzenithal admissory concretion crystallographical coadvice counteralliance 	
+ell unurban lineamental interfraternal isopelletierin 	
+cretaceous exploiter uncarefully cubby rivethead uninhabitedness oversand uvanite mendacity 	
+almud boor widdle hogmace toxoplasmosis unharmed 	
+taurocolla repealableness ramosopalmate ascitic dastardliness Filipendula dunkadoo giantly lebensraum 	
+osteopaedion pseudoxanthine botchedly hepatorrhaphy redesertion Hysterocarpus diplomatize paradisean steprelationship 	
+allectory mericarp dipsomaniacal reconciliable pendulant subirrigate leucophoenicite deepmost misthread 	
+refective Tamil angina dastardliness swangy 	
+golem dialoguer hemimelus culm parmelioid 	
+sloped technopsychology seminonflammable pachydermatoid transude propheticism trip arrendation warriorwise 	
+peristeropode halloo consumptional ambitus nummi 	
+Vaishnavism liquidity involatile incalculable papery mutter starosta quadrennial figureheadship 	
+ornithodelphous paunchy prescriber decidable dermorhynchous exploiter ticktick lifter 	
+spot seizing benzothiofuran unisexuality laryngic infestation 	
+abthainry undercolored balladmonger chronographic saponaceous orthopedical infestation enterostomy unforkedness 	
+collegian alveolite templar wandoo osteopaedion barkometer frontoorbital serosanguineous mericarp 	
+transcortical pneumonalgia micromembrane diurnalness chargeably hysterolysis osteopaedion 	
+phlogisticate Scanic cumbrousness unachievable ten imprescribable jajman 	
+unurban antineuritic unefficient templar squdge Spencerism orchiocatabasis fetlocked 	
+stradametrical wherefrom subdentate Gothish impugnation componental 	
+eucalypteol jharal fallacious spermaphyte ultratense arrendation 	
+horsefly diathermacy dermorhynchous agglomeratic wemless Homoiousian 	
+amylogenesis knob Aplacentalia giantly pentafid genii 	
+by velaric proauction oratorship commandingness Haversian uncompromisingly 	
+toxihaemia provedore psychofugal bonze digitule 	
+orgiastic coldfinch danseuse introducer almud merciful manganosiderite chorograph 	
+chorograph planispheric plugger unpatched pyroacetic Alethea benzothiofuran counterappellant 	
+anta sapphiric benthonic allotropic gelatinousness 	
+gul pneumatotherapy bismuthiferous prospectiveness bromate unrealize hondo 	
+laurinoxylon lithotresis flippantness consumptional slipped 	
+overwoven Pincian stiffish aconitine seizing instructiveness endotheliomyoma halloo 	
+ultrasystematic instructiveness unimmortal Lemuridae basto groundneedle outwealth 	
+rivethead saccharogenic nigh scyphostoma balladmonger pachydermatoid 	
+gala fossilism ultratense ladhood orchiocatabasis upswell catabaptist Italical unprovided 	
+penult phallaceous cornberry Vaishnavism times Bulanda divinator 	
+licitness benzoperoxide Helvidian mesymnion acidophile 	
+brutism cubit dipsomaniacal oxyterpene ungouged Edo nonprofession 	
+chorograph Prosobranchiata unfulminated diwata symbiogenetically swearingly Sphenodontidae unrepealably 	
+bromic preoral stradametrical undercolored dithery 	
+electrotechnics scabbardless seminonflammable imprescribable infrastapedial nonsuppressed 	
+thermanesthesia angina okonite bestill authorling Scorpaenidae louse by 	
+waird deaf epauliere pentafid ethnocracy misthread scotale balladmonger bonze 	
+subdrainage piquantness impairment arrowworm vinegarish atlantite poleax 	
+manganosiderite perfunctory periclitation bicorporeal arteriasis embryotic Pithecolobium sturdied 	
+phoenicochroite unscourged sialadenitis whitlowwort terrestrially proacquittal almud Bassaris 	
+Mormyrus tartrous toplike vinegarish absvolt 	
+divinator gemmeous sapience laurinoxylon seizing orchiocatabasis benthonic depressingly quailberry 	
+sheepskin stapedius hypochondriacism sviatonosite preparative adatom docimastical 	
+overstudiousness barkometer benzoperoxide divinator masa chordacentrum scapuloradial 	
+omniscribent Hydrangea myesthesia lineamental Haversian 	
+Bassaris warlike doina overinstruct Animalivora 	
+vitally Florissant prepavement imaginary yeelaman outwealth 	
+potentness epididymitis doina overwoven sheepskin pendulant scabbardless ultrasystematic gelatinousness 	
+liberatress blurredness benzoperoxide predisputant throbless prolificy pomiferous 	
+unachievable ungouged gunshop bacterioblast photoelasticity mesymnion scabbardless misthread 	
+subfoliar aconitine corelysis undecorated acocotl sud 	
+ultraobscure oinomancy hemimelus seelful liberatress aquiline Dodecatheon clanned 	
+dipsomaniacal abthainry gorilloid dithery bot smokefarthings cloy 	
+uncombable brooky magnificently bought fossilism concretion technopsychology depravity subtransverse 	
+subofficer debellator angiolymphoma venialness Arneb pictorially warlike sarcologist 	
+Munychian neuromimesis sesquiquintile sportswomanship Dawsonia Socraticism incalculable bugre outhue 	
+figureheadship sviatonosite uninductive unstipulated planosubulate horsefly weism 	
+characinoid poleax benzoperoxide sedentariness Isokontae 	
+stormy oinomancy Edo stewardship ambitus technopsychology yeat sapience 	
+diatomaceous unrepealably rainproof transude nonprofession phlogisticate Glecoma scyphostoma 	
+discipular seelful nonuple neurotrophic coadvice pony zenick 	
+saccharogenic insatiately proboscidiform blurredness stormy dialoguer floatability 	
+becomma zoonitic whittle wingable phytonic 	
+cumbrousness weism componental bismuthiferous underogating Scanic sombreroed electrotechnics planosubulate 	
+glacierist octogynous dithery chacona monilioid overcrown friarhood unrepealably 	
+digitule trabecular projecting oratorize phlogisticate Fouquieria 	
+times atlantite sesquiquintile comism Scorpaenidae volcano 	
+reconciliable warlike raphis spookdom monilioid ventricous relaster migrainoid arduousness 	
+relaster subangulated evictor rave tartrous pumpkinification 	
+pictorially intrabred devilwise abstractionism calycular misexposition cockal uloid 	
+spot sturdied paunchy plerome Inger 	
+critically spherulitic Triconodonta balladmonger penult comparability aurothiosulphuric Itea 	
+saccharogenic greave inexistency horsefly cocksuredom 	
+afterpressure selectivity triakistetrahedral cacuminal shellworker Muscicapa 	
+mustafina prospectiveness horsefly sombreroed yawler reperuse pleasurehood blurredness 	
+inductivity unschematized neurodegenerative diurnalness subsequentially soorkee divinator Megaluridae 	
+arteriasis Mesua allectory farrantly toplike guitarist 	
+aquiline codisjunct squdge allectory pelf squit palaeotheriodont asparaginic 	
+Saponaria diminutively chooser Homoiousian eer dipsomaniacal impressor jajman 	
+approbation physiologian immatchable antiadiaphorist seminonflammable 	
+coldfinch psychofugal Animalivora ultrasystematic corelysis 	
+oinomancy Joachimite tartrous interruptedness pelf overwoven acocotl 	
+refective metopon proboscidiform overstudiousness pope nonrepetition 	
+chargeably giantly imprescribable unprovided clanned farrantly 	
+absvolt Shiah cockstone trillium absvolt planosubulate scotching cornberry throbless 	
+lyrebird constitutor pomiferous pneumatotherapy orthopedical potentness strammel porriginous seraphism 	
+unrepealably unburnt Endomycetaceae dehairer meriquinoidal isopelletierin tricae involatile 	
+diatomaceous scapuloradial epidymides tickleproof euphemize bunghole Triconodonta 	
+taurocolla collegian beneficent pony reformatory Yannigan orgiastic pope 	
+peptonate swangy pictorially obolus ploration benzothiofuran exploiter Scorpaenidae 	
+Spencerism bugre squdge ultratense uvanite approbation relaster 	
+Edo Eleusinian spiranthic pictorially countergabion bettermost tickleproof 	
+Fouquieria tetrahedral dishpan putative pictorially ambitus Effie unreprimanded 	
+bot metopon synovial undecorated preparative airfreighter 	
+sangaree pompiloid antiscolic coracomandibular epauliere 	
+undiffusive scabbardless vinny Bertat Passiflorales sloped undercolored 	
+lithograph Shiah erythrodextrin slipped peptonate larklike 	
+scotale various unstressedly relaster limpet 	
+stapedius ultratense sedentariness hellbender dipsomaniacal trunnel familist ovoviviparous stronghearted 	
+mastication impairment basto spiranthic tickleproof uncombable eurythermal various 	
+gala Alethea quad umbellic decidable orgiastic 	
+antihero enhedge jharal cumbrousness rede overstudiousness transude wingable 	
+gemmeous hypoid characinoid analgize Chiasmodontidae 	
+unharmed okonite merciful chacona jirble 	
+pentagamist acocotl seraphism cuproiodargyrite dermorhynchous debromination metrocratic 	
+shellworker atlantite doina paradisean circumzenithal stewardship scapuloradial 	
+regardful involatile bromic ladhood barkometer circular unpeople 	
+heliocentricism mechanist byroad Animalivora strammel veterinarian 	
+depthwise jirble nativeness marten preparative dosseret 	
+Zuludom floatability mangonism sesquiquintile thorite sertularian pleurotropous Prosobranchiata 	
+prezygapophysial terrestrially Prosobranchiata cresylite topline umangite lineamental 	
+coracomandibular counterappellant preagitate Confervales insatiately skyshine proauction 	
+omega Prosobranchiata deepmost subdrainage planosubulate 	
+Triphora debromination isopelletierin Aplacentalia monstership redesertion imprescribable sedentariness meriquinoidal 	
+Savitar uninhabitedness Eleusinian cubby Russifier propheticism beatable pterostigma prolificy 	
+pansophism focaloid eulogization impairment Hydrangea antineuritic 	
+gala decardinalize frameable lienteria seditious 	
+deepmost uncompromisingness Prosobranchiata Confervales Macraucheniidae classificational dunkadoo biodynamics returnability 	
+embryotic gymnastic toxoplasmosis anta analgize adscendent louse Hysterocarpus undinted 	
+divinator Jerusalem brooky flushgate saccharogenic ultratense ell 	
+Pishquow affaite putative supermarket schoolmasterism squit unisexuality centrifugalization lampyrine 	
+liberatress antivenin marten selectivity scapuloradial uninterpleaded scrubbed lithotresis 	
+gul avengeful licitness analgic rainproof schoolmasterism cresylite yote 	
+phoenicochroite euphemious hackneyed unprovided bucketer fallacious carposporangial repealableness jirble 	
+ticktick subdrainage biodynamics michigan comism 	
+sialadenitis vinegarish pterostigma debellator noncrystallized 	
+frenal bugre suspend pictorially parabolicness vinny pelf 	
+scotching skyshine homeotypical Fameuse Gilaki serosanguineous Hydrangea 	
+umbellic planosubulate dithery various reappreciate stroking rizzomed chrysochrous 	
+slangy uninterpleaded reciprocation unisexuality subirrigate Joachimite 	
+unimmortal undiffusive instructiveness chordacentrum Passiflorales 	
+overwoven timbermonger Protestantize slangy visceral concretion 	
+dithery commandingness Bassaris uncompromisingness redescend placatory myesthesia chrysochrous 	
+aspersor proacquittal raphis cylindric overstudiousness symbiogenetically 	
+wherefrom adatom undeterring marten centrifugalization trisilicic uncontradictableness 	
+Inger cocksuredom seminonflammable pompiloid concretion epauliere technopsychology peristeropode 	
+rizzomed metastoma basto imperceptivity canicule 	
+foursquare prescriptible Coniferae soorkee Yannigan unswanlike Aplacentalia 	
+bladderwort lyrebird boor trophonema embryotic 	
+raphis tristich impressor dunkadoo seditious insatiately chronist throbless 	
+bromic scotale migrainoid oblongly reperuse cervisial dialoguer Haversian 	
+Vaishnavism greave exprobratory saponaceous redesertion bozal 	
+unexplicit zenick liberatress Scorpaenidae transcortical componental Megaluridae naught 	
+provedore codisjunct intuition penult absvolt temporomastoid vinegarish monogoneutic 	
+vesperal peristeropode swangy unisexuality vesperal 	
+cocksuredom balanocele glossing participatingly liquidity lifter Fouquieria 	
+theologal archididascalian divinator impairment gymnastic characinoid topsail impressor 	
+metapolitics unschematized knob proauction peristeropode jajman glaumrie commandingness 	
+oflete generalizable frictionlessly overbuilt pseudohalogen cacuminal 	
+commandingness stereotypography oflete seditious nonuple arrowworm debellator rave 	
+twinling times unpatched dinical pneumonalgia mendacity 	
+Hysterocarpus pony massedly stachyuraceous unlapsing palaeotheriodont chorograph 	
+chronographic sapphiric cyanophilous tramplike laryngic 	
+putative figured euphemious Homoiousian dastardliness Bermudian 	
+verbid Llandovery papery pneumonalgia glossing ticktick constitutor plugger subdrainage 	
+Bermudian agglomeratic cylindric sawdust debellator periclitation becomma refasten 	
+pansophism laubanite pyxie Protestantize metoxazine horsefly repealableness 	
+basto componental repealableness whitlowwort eristically 	
+unpredict propodiale endotheliomyoma uvanite sombreroed 	
+intrabred thiodiazole autobiographist frameable outwealth Edo moodishness unswanlike phytonic 	
+chasmy phytoma subdrainage Italical amplexifoliate physiologian 	
+Haversian diplomatize omniscribent pleasurehood mangonism unaccessible 	
+metastoma unrealize cubby Tsonecan manilla diplomatize 	
+predebit Consolamentum metapolitics instructiveness familist topline squit Arneb 	
+slait generalizable unanatomized unreprimanded boor figureheadship omniscribent dialoguer 	
+flatman serpentinic orgiastic upswell unurban playfellowship ovoviviparous sertularian uncarefully 	
+lienteria Glecoma playfellowship trophonema subangulated iniquitously proauction 	
+migrainoid marten thermochemically frontoorbital japanned flutist 	
+rotular cockstone Edo stradametrical flushgate paranephros okonite 	
+oversand hymnic subofficer choralcelo sapphiric spiranthic 	
+unexplicit porriginous familist apocalypst Eleusinian 	
+yeelaman flutist starosta dunkadoo Spatangoidea Orbitolina Hester terrificness Pyrales 	
+monander transcorporeal hypochondriacism seeingness octogynous perculsive Shiah analgic 	
+uniarticular bladderwort Thraupidae bozal warriorwise 	
+unisexuality palaeotheriodont inventurous bromic dithery unrepealably erlking 	
+dermorhynchous serosanguineous Pithecolobium parabolicness seizing 	
+splenauxe impairment seizing magnificently doubtingness imprescribable 	
+consumptional orgiastic analgic neuromimesis seizing 	
+Bermudian subdentate quadrennial cylindric lithograph pony paleornithology 	
+interruptor starosta antiscolic goodwill euphemious 	
+subofficer avengeful Homoiousian ti

<TRUNCATED>

[11/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java
new file mode 100644
index 0000000..306fc25
--- /dev/null
+++ b/examples/storm-jms-examples/src/main/java/org/apache/storm/jms/example/SpringJmsProvider.java
@@ -0,0 +1,74 @@
+/*
+ * 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 org.apache.storm.jms.example;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import org.apache.storm.jms.JmsProvider;
+
+
+/**
+ * A <code>JmsProvider</code> that uses the spring framework
+ * to obtain a JMS <code>ConnectionFactory</code> and 
+ * <code>Desitnation</code> objects.
+ * <p/>
+ * The constructor takes three arguments:
+ * <ol>
+ * <li>A string pointing to the the spring application context file contining the JMS configuration
+ * (must be on the classpath)
+ * </li>
+ * <li>The name of the connection factory bean</li>
+ * <li>The name of the destination bean</li>
+ * </ol>
+ * 
+ *
+ *
+ */
+@SuppressWarnings("serial")
+public class SpringJmsProvider implements JmsProvider {
+	private ConnectionFactory connectionFactory;
+	private Destination destination;
+	
+	/**
+	 * Constructs a <code>SpringJmsProvider</code> object given the name of a
+	 * classpath resource (the spring application context file), and the bean
+	 * names of a JMS connection factory and destination.
+	 * 
+	 * @param appContextClasspathResource - the spring configuration file (classpath resource)
+	 * @param connectionFactoryBean - the JMS connection factory bean name
+	 * @param destinationBean - the JMS destination bean name
+	 */
+	public SpringJmsProvider(String appContextClasspathResource, String connectionFactoryBean, String destinationBean){
+		ApplicationContext context = new ClassPathXmlApplicationContext(appContextClasspathResource);
+		this.connectionFactory = (ConnectionFactory)context.getBean(connectionFactoryBean);
+		this.destination = (Destination)context.getBean(destinationBean);
+	}
+
+	public ConnectionFactory connectionFactory() throws Exception {
+		return this.connectionFactory;
+	}
+
+	public Destination destination() throws Exception {
+		return this.destination;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/src/main/resources/jms-activemq.xml
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/src/main/resources/jms-activemq.xml b/examples/storm-jms-examples/src/main/resources/jms-activemq.xml
new file mode 100644
index 0000000..1a845b8
--- /dev/null
+++ b/examples/storm-jms-examples/src/main/resources/jms-activemq.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans 
+  xmlns="http://www.springframework.org/schema/beans" 
+  xmlns:amq="http://activemq.apache.org/schema/core"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
+
+	<!-- ActiveMQ -->
+
+	<!-- embedded ActiveMQ Broker -->
+	<!-- <amq:broker useJmx="false" persistent="false">
+		<amq:transportConnectors>
+			<amq:transportConnector uri="tcp://localhost:61616" />
+		</amq:transportConnectors>
+	</amq:broker> -->
+
+	<amq:queue id="notificationQueue" physicalName="backtype.storm.contrib.example.queue" />
+	
+	<amq:topic id="notificationTopic" physicalName="backtype.storm.contrib.example.topic" />
+
+	<amq:connectionFactory id="jmsConnectionFactory"
+		brokerURL="tcp://localhost:61616" />
+
+	<!-- <bean id="queueTemplate" class="org.springframework.jms.core.JmsTemplate">
+		<property name="connectionFactory">
+			<ref bean="jmsConnectionFactory" />
+		</property>
+		<property name="pubSubDomain" value="false" />
+	</bean> -->
+	
+</beans>
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-jms-examples/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/examples/storm-jms-examples/src/main/resources/log4j.properties b/examples/storm-jms-examples/src/main/resources/log4j.properties
new file mode 100644
index 0000000..079b195
--- /dev/null
+++ b/examples/storm-jms-examples/src/main/resources/log4j.properties
@@ -0,0 +1,29 @@
+# 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.
+
+log4j.rootLogger=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+log4j.appender.stdout.layout.ConversionPattern=%5p (%C:%L) - %m%n
+
+
+log4j.logger.backtype.storm.contrib=DEBUG
+log4j.logger.clojure.contrib=WARN
+log4j.logger.org.springframework=WARN
+log4j.logger.org.apache.zookeeper=WARN
+

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-kafka-client-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-kafka-client-examples/pom.xml b/examples/storm-kafka-client-examples/pom.xml
index 1c4449b..554818b 100644
--- a/examples/storm-kafka-client-examples/pom.xml
+++ b/examples/storm-kafka-client-examples/pom.xml
@@ -31,20 +31,6 @@
 
     <artifactId>storm-kafka-client-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-kafka-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-kafka-examples/pom.xml b/examples/storm-kafka-examples/pom.xml
index 8c1e74d..65eeda6 100644
--- a/examples/storm-kafka-examples/pom.xml
+++ b/examples/storm-kafka-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-kafka-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-mongodb-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-mongodb-examples/pom.xml b/examples/storm-mongodb-examples/pom.xml
index 6def943..297a6e8 100644
--- a/examples/storm-mongodb-examples/pom.xml
+++ b/examples/storm-mongodb-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-mongodb-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-mqtt-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-mqtt-examples/pom.xml b/examples/storm-mqtt-examples/pom.xml
index ab061c4..ca2d03b 100644
--- a/examples/storm-mqtt-examples/pom.xml
+++ b/examples/storm-mqtt-examples/pom.xml
@@ -31,20 +31,6 @@
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <provided.scope>provided</provided.scope>
-  </properties>
-
-  <profiles>
-    <profile>
-      <id>intellij</id>
-      <properties>
-        <provided.scope>compile</provided.scope>
-      </properties>
-    </profile>
-  </profiles>
-
   <dependencies>
    <dependency>
       <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-opentsdb-examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-opentsdb-examples/pom.xml b/examples/storm-opentsdb-examples/pom.xml
index 2a24f8d..9ffd12f 100644
--- a/examples/storm-opentsdb-examples/pom.xml
+++ b/examples/storm-opentsdb-examples/pom.xml
@@ -27,20 +27,6 @@
 
     <artifactId>storm-opentsdb-examples</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.storm</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/README.markdown
----------------------------------------------------------------------
diff --git a/examples/storm-perf/README.markdown b/examples/storm-perf/README.markdown
new file mode 100644
index 0000000..946ab21
--- /dev/null
+++ b/examples/storm-perf/README.markdown
@@ -0,0 +1,50 @@
+# Topologies for measuring Storm performance
+
+This module includes topologies designed for measuring Storm performance.
+
+## Overview
+There are two basic modes for running these topologies
+
+- **Cluster mode:** Submits the topology to a storm cluster. This mode is useful for benchmarking. It calculates throughput and latency numbers every minute and prints them on the console.
+- **In-process mode:** Uses LocalCluster to run topology. This mode helps identify bottlenecks using profilers like JProfiler from within a IDE. This mode does not print metrics.
+
+In both the modes, a shutdown hook is setup to terminate the topology when the program that is submitting the topology is terminated.
+
+The bundled topologies can be classified into two types.
+
+- Topologies that measure purely the internal functioning of Storm. Such topologies do not interact with external systems like Kafka or Hdfs.
+- Topologies that measure speed of I/O with external systems like Kafka and Hdfs.
+
+Topologies that measure internal performance can be run in either in-proc or cluster modes.
+Topologies that measure I/O with external systems are designed to run in cluster mode only.
+
+## Topologies List
+
+1. **ConstSpoutOnlyTopo:** Helps measure how fast spout can emit. This topology has a spout and is not connected to any bolts. Supports in-proc and cluster mode.
+2. **ConstSpoutNullBoltTopo:** Helps measure how fast spout can send data to a bolt. Spout emits a stream of constant values to a DevNull bolt which discards the incoming tuples. Supports in-proc and cluster mode.
+3. **ConstSpoutIdBoltNullBoltTopo:** Helps measure speed of messaging between spouts and bolts. Spout emits a stream of constant values to an ID bolt which clones the tuple and emits it downstream to a DevNull bolt. Supports in-proc and cluster mode.
+4. **FileReadWordCount:** Measures speed of word counting. The spout loads a file into memory and emits these lines in an infinite loop. Supports in-proc and cluster mode.
+5. **HdfsSpoutNullBolt:** Measures speed at which HdfsSpout can read from HDFS. Supports cluster mode only.
+6. **StrGenSpoutHdfsBoltTopo:** Measures speed at which HdfsBolt can write to HDFS. Supports cluster mode only.
+7. **KafkaSpoutNullBolt:** Measures speed at which KafkaSpout can read from Kafka. Supports cluster mode only.
+8. **KafkaHdfsTopo:** Measures how fast Storm can read from Kafka and write to HDFS.
+
+
+## How to run ?
+
+### In-process mode:
+This mode is intended for running the topology quickly and easily from within the IDE and does not expect any command line arguments.
+Simply running the Topology's main() method without any arguments will get it running. The topology runs indefinitely till the program is terminated.
+
+
+### Cluster mode:
+When the topology is run with one or more than one cmd line arguments, the topology is submitted to the cluster.
+The first argument indicates how long the topology should be run. Often the second argument refers to a yaml config
+file which contains topology configuration settings. The conf/ directory in this module contains sample config files
+with names matching the corresponding topology.
+
+These topologies can be run using the standard storm jar command.
+
+```
+bin/storm jar  /path/storm-perf-1.1.0-jar-with-dependencies.jar org.apache.storm.perf.ConstSpoutNullBoltTopo  200  conf/ConstSpoutIdBoltNullBoltTopo.yaml
+```
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/pom.xml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/pom.xml b/examples/storm-perf/pom.xml
new file mode 100644
index 0000000..64ae889
--- /dev/null
+++ b/examples/storm-perf/pom.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>storm</artifactId>
+        <groupId>org.apache.storm</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <groupId>org.apache.storm</groupId>
+    <artifactId>storm-perf</artifactId>
+    <packaging>jar</packaging>
+    <name>Storm Perf</name>
+    <description>Topologies and tools to measure performance.</description>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <archive>
+                        <manifest>
+                            <mainClass />
+                        </manifest>
+                    </archive>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <executable>java</executable>
+                    <includeProjectDependencies>true</includeProjectDependencies>
+                    <includePluginDependencies>false</includePluginDependencies>
+                    <classpathScope>compile</classpathScope>
+                    <mainClass>${storm.topology}</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-core</artifactId>
+            <version>${project.version}</version>
+            <!--
+              Use "provided" scope to keep storm out of the jar-with-dependencies
+              For IntelliJ dev, intellij will load properly.
+            -->
+            <scope>${provided.scope}</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-kafka</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.storm</groupId>
+            <artifactId>storm-hdfs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+
+</project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml b/examples/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml
new file mode 100644
index 0000000..9f74aee
--- /dev/null
+++ b/examples/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml
@@ -0,0 +1,22 @@
+# 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.
+
+spout.count : 1
+bolt1.count : 1  # IdBolt instances
+bolt2.count : 1  # DevNullBolt instances
+
+# storm config overrides
+topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml b/examples/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml
new file mode 100644
index 0000000..51f2dd7
--- /dev/null
+++ b/examples/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml
@@ -0,0 +1,22 @@
+# 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.
+
+spout.count : 1
+bolt.count : 1
+grouping : "local"  # either  "shuffle" or "local"
+
+# storm config overrides
+topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/conf/FileReadWordCountTopo.yaml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/conf/FileReadWordCountTopo.yaml b/examples/storm-perf/src/main/conf/FileReadWordCountTopo.yaml
new file mode 100644
index 0000000..61abe8f
--- /dev/null
+++ b/examples/storm-perf/src/main/conf/FileReadWordCountTopo.yaml
@@ -0,0 +1,23 @@
+# 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.
+
+spout.count : 1
+splitter.count : 1
+counter.count : 1
+input.file : "/Users/roshan/Projects/idea/storm/storm-perf/src/main/resources/randomwords.txt"
+
+# storm config overrides
+topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml b/examples/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml
new file mode 100644
index 0000000..a06ad6e
--- /dev/null
+++ b/examples/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml
@@ -0,0 +1,25 @@
+# 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.
+
+spout.count : 1
+bolt.count : 1
+hdfs.uri : "hdfs://hdfs.namenode:8020"
+hdfs.source.dir :  "/tmp/storm/in"
+hdfs.archive.dir : "/tmp/storm/done"
+hdfs.bad.dir : "/tmp/storm/bad"
+
+# storm config overrides
+topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/conf/KafkaHdfsTopo.yaml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/conf/KafkaHdfsTopo.yaml b/examples/storm-perf/src/main/conf/KafkaHdfsTopo.yaml
new file mode 100755
index 0000000..a8ed2f2
--- /dev/null
+++ b/examples/storm-perf/src/main/conf/KafkaHdfsTopo.yaml
@@ -0,0 +1,26 @@
+# 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.
+
+spout.count : 1
+bolt.count : 1
+kafka.topic : "kafka_topic"
+zk.uri : "zkhostname:2181"
+hdfs.uri : "hdfs://hdfs.namenode:8020"
+hdfs.dir : "/tmp/storm"
+hdfs.batch : 1000
+
+# storm config overrides
+topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml b/examples/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml
new file mode 100644
index 0000000..cde4c2e
--- /dev/null
+++ b/examples/storm-perf/src/main/conf/KafkaSpoutNullBoltTopo.yaml
@@ -0,0 +1,23 @@
+# 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.
+
+spout.count : 1
+bolt.count : 1
+kafka.topic : "kafka_topic"
+zk.uri : "zkhostname:2181"
+
+# storm config overrides
+topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml b/examples/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml
new file mode 100644
index 0000000..d16431b
--- /dev/null
+++ b/examples/storm-perf/src/main/conf/StrGenSpoutHdfsBoltTopo.yaml
@@ -0,0 +1,25 @@
+# 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.
+
+spout.count : 1
+bolt.count : 1
+hdfs.uri : "hdfs://hdfs.namenode:8020"
+hdfs.dir : "/tmp/storm"
+hdfs.batch : 1000
+
+
+# storm config overrides
+topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java
new file mode 100644
index 0000000..11c63d3
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutIdBoltNullBoltTopo.java
@@ -0,0 +1,101 @@
+/*
+ * 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 org.apache.storm.perf;
+
+import org.apache.storm.Config;
+import org.apache.storm.LocalCluster;
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.perf.bolt.DevNullBolt;
+import org.apache.storm.perf.bolt.IdBolt;
+import org.apache.storm.perf.spout.ConstSpout;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.utils.Utils;
+
+import java.util.Map;
+
+/**
+ * ConstSpout -> IdBolt -> DevNullBolt
+ * This topology measures speed of messaging between spouts->bolt  and  bolt->bolt
+ *   ConstSpout : Continuously emits a constant string
+ *   IdBolt : clones and emits input tuples
+ *   DevNullBolt : discards incoming tuples
+ */
+public class ConstSpoutIdBoltNullBoltTopo {
+
+    public static final String TOPOLOGY_NAME = "ConstSpoutIdBoltNullBoltTopo";
+    public static final String SPOUT_ID = "constSpout";
+    public static final String BOLT1_ID = "idBolt";
+    public static final String BOLT2_ID = "nullBolt";
+
+    // Configs
+    public static final String BOLT1_COUNT = "bolt1.count";
+    public static final String BOLT2_COUNT = "bolt2.count";
+    public static final String SPOUT_COUNT = "spout.count";
+
+    public static StormTopology getTopology(Map conf) {
+
+        // 1 -  Setup Spout   --------
+        ConstSpout spout = new ConstSpout("some data").withOutputFields("str");
+
+        // 2 -  Setup IdBolt & DevNullBolt   --------
+        IdBolt bolt1 = new IdBolt();
+        DevNullBolt bolt2 = new DevNullBolt();
+
+
+        // 3 - Setup Topology  --------
+        TopologyBuilder builder = new TopologyBuilder();
+
+        builder.setSpout(SPOUT_ID, spout,  Helper.getInt(conf, SPOUT_COUNT, 1) );
+
+        builder.setBolt(BOLT1_ID, bolt1, Helper.getInt(conf, BOLT1_COUNT, 1))
+                .localOrShuffleGrouping(SPOUT_ID);
+
+        builder.setBolt(BOLT2_ID, bolt2, Helper.getInt(conf, BOLT2_COUNT, 1))
+                .localOrShuffleGrouping(BOLT1_ID);
+
+        return builder.createTopology();
+    }
+
+
+    public static void main(String[] args) throws Exception {
+
+        if (args.length <= 0) {
+            // submit to local cluster
+            Config conf = new Config();
+            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(conf));
+
+            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
+            while (true) {//  run indefinitely till Ctrl-C
+                Thread.sleep(20_000_000);
+            }
+        } else {
+            // submit to real cluster
+            if (args.length >2) {
+                System.err.println("args: runDurationSec  [optionalConfFile]");
+                return;
+            }
+            Integer durationSec = Integer.parseInt(args[0]);
+            Map topoConf =  (args.length==2) ? Utils.findAndReadConfigFile(args[1])  : new Config();
+
+            //  Submit topology to storm cluster
+            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java
new file mode 100755
index 0000000..92c2787
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutNullBoltTopo.java
@@ -0,0 +1,107 @@
+/*
+ * 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 org.apache.storm.perf;
+
+import org.apache.storm.Config;
+import org.apache.storm.LocalCluster;
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.perf.bolt.DevNullBolt;
+import org.apache.storm.perf.spout.ConstSpout;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.BoltDeclarer;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.utils.Utils;
+
+import java.util.Map;
+
+/***
+ * This topo helps measure the messaging speed between a spout and a bolt.
+ *  Spout generates a stream of a fixed string.
+ *  Bolt will simply ack and discard the tuple received
+ */
+
+public class ConstSpoutNullBoltTopo {
+
+    public static final String TOPOLOGY_NAME = "ConstSpoutNullBoltTopo";
+    public static final String SPOUT_ID = "constSpout";
+    public static final String BOLT_ID = "nullBolt";
+
+    // Configs
+    public static final String BOLT_COUNT = "bolt.count";
+    public static final String SPOUT_COUNT = "spout.count";
+    public static final String GROUPING = "grouping"; // can be 'local' or 'shuffle'
+
+    public static final String LOCAL_GROPING = "local";
+    public static final String SHUFFLE_GROUPING = "shuffle";
+    public static final String DEFAULT_GROUPING = LOCAL_GROPING;
+
+    public static StormTopology getTopology(Map conf) {
+
+        // 1 -  Setup Spout   --------
+        ConstSpout spout = new ConstSpout("some data").withOutputFields("str");
+
+        // 2 -  Setup DevNull Bolt   --------
+        DevNullBolt bolt = new DevNullBolt();
+
+
+        // 3 - Setup Topology  --------
+        TopologyBuilder builder = new TopologyBuilder();
+
+        builder.setSpout(SPOUT_ID, spout,  Helper.getInt(conf, SPOUT_COUNT, 1) );
+        BoltDeclarer bd = builder.setBolt(BOLT_ID, bolt, Helper.getInt(conf, BOLT_COUNT, 1));
+
+        String groupingType = Helper.getStr(conf, GROUPING);
+        if(groupingType==null || groupingType.equalsIgnoreCase(DEFAULT_GROUPING) )
+            bd.localOrShuffleGrouping(SPOUT_ID);
+        else if(groupingType.equalsIgnoreCase(SHUFFLE_GROUPING) )
+            bd.shuffleGrouping(SPOUT_ID);
+        return builder.createTopology();
+    }
+
+    /**
+     * ConstSpout -> DevNullBolt with configurable grouping (default localOrShuffle)
+     */
+    public static void main(String[] args) throws Exception {
+
+        if(args.length <= 0) {
+            // For IDE based profiling ... submit topology to local cluster
+            Config conf = new Config();
+            final LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(conf));
+
+            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
+            while (true) {//  run indefinitely till Ctrl-C
+                Thread.sleep(20_000_000);
+            }
+
+        } else {
+            // For measuring perf against a Storm cluster
+            if (args.length > 2) {
+                System.err.println("args: runDurationSec  [optionalConfFile]");
+                return;
+            }
+            Integer durationSec = Integer.parseInt(args[0]);
+            Map topoConf =  (args.length==2) ? Utils.findAndReadConfigFile(args[1])  : new Config();
+
+            //  Submit topology to storm cluster
+            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
+        }
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java
new file mode 100755
index 0000000..721ae3d
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/ConstSpoutOnlyTopo.java
@@ -0,0 +1,74 @@
+/*
+ * 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 org.apache.storm.perf;
+
+import org.apache.storm.Config;
+import org.apache.storm.LocalCluster;
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.perf.spout.ConstSpout;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.TopologyBuilder;
+
+
+/***
+ * This topo helps measure how fast a spout can produce data (so no bolts are attached)
+ *  Spout generates a stream of a fixed string.
+ */
+
+public class ConstSpoutOnlyTopo {
+
+    public static final String TOPOLOGY_NAME = "ConstSpoutOnlyTopo";
+    public static final String SPOUT_ID = "constSpout";
+
+
+    public static StormTopology getTopology() {
+
+        // 1 -  Setup Const Spout   --------
+        ConstSpout spout = new ConstSpout("some data").withOutputFields("str");
+
+        // 2 - Setup Topology  --------
+        TopologyBuilder builder = new TopologyBuilder();
+        builder.setSpout(SPOUT_ID, spout, 1);
+        return builder.createTopology();
+    }
+
+    /**
+     * ConstSpout only topology  (No bolts)
+     */
+    public static void main(String[] args) throws Exception {
+        if(args.length <= 0) {
+            // For IDE based profiling ... submit topology to local cluster
+            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology());
+
+            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
+            while (true) {//  run indefinitely till Ctrl-C
+                Thread.sleep(20_000_000);
+            }
+        } else {
+            //  Submit topology to storm cluster
+            if (args.length != 1) {
+                System.err.println("args: runDurationSec");
+                return;
+            }
+            Integer durationSec = Integer.parseInt(args[0]);
+
+            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, new Config(), getTopology());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java
new file mode 100644
index 0000000..d518c86
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/FileReadWordCountTopo.java
@@ -0,0 +1,96 @@
+/*
+* 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 org.apache.storm.perf;
+
+
+import org.apache.storm.Config;
+import org.apache.storm.LocalCluster;
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.perf.bolt.CountBolt;
+import org.apache.storm.perf.bolt.SplitSentenceBolt;
+import org.apache.storm.perf.spout.FileReadSpout;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.utils.Utils;
+
+
+import java.util.Map;
+
+/***
+ * This topo helps measure speed of word count.
+ *  Spout loads a file into memory on initialization, then emits the lines in an endless loop.
+ */
+
+public class FileReadWordCountTopo {
+    public static final String SPOUT_ID =   "spout";
+    public static final String COUNT_ID =   "counter";
+    public static final String SPLIT_ID =   "splitter";
+    public static final String TOPOLOGY_NAME = "FileReadWordCountTopo";
+
+    // Config settings
+    public static final String SPOUT_NUM =  "spout.count";
+    public static final String SPLIT_NUM =  "splitter.count";
+    public static final String COUNT_NUM =  "counter.count";
+    public static final String INPUT_FILE = "input.file";
+
+    public static final int DEFAULT_SPOUT_NUM = 1;
+    public static final int DEFAULT_SPLIT_BOLT_NUM = 2;
+    public static final int DEFAULT_COUNT_BOLT_NUM = 2;
+
+
+    public static StormTopology getTopology(Map config) {
+
+        final int spoutNum = Helper.getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
+        final int spBoltNum = Helper.getInt(config, SPLIT_NUM, DEFAULT_SPLIT_BOLT_NUM);
+        final int cntBoltNum = Helper.getInt(config, COUNT_NUM, DEFAULT_COUNT_BOLT_NUM);
+        final String inputFile = Helper.getStr(config, INPUT_FILE);
+
+        TopologyBuilder builder = new TopologyBuilder();
+        builder.setSpout(SPOUT_ID, new FileReadSpout(inputFile), spoutNum);
+        builder.setBolt(SPLIT_ID, new SplitSentenceBolt(), spBoltNum).localOrShuffleGrouping(SPOUT_ID);
+        builder.setBolt(COUNT_ID, new CountBolt(), cntBoltNum).fieldsGrouping(SPLIT_ID, new Fields(SplitSentenceBolt.FIELDS));
+
+        return builder.createTopology();
+    }
+
+    public static void main(String[] args) throws Exception {
+        if(args.length <= 0) {
+            // For IDE based profiling ... submit topology to local cluster
+            Config conf = new Config();
+            conf.put(INPUT_FILE, "resources/randomwords.txt");
+            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(conf));
+
+            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
+            while (true) {//  run indefinitely till Ctrl-C
+                Thread.sleep(20_000_000);
+            }
+        } else {
+            //  Submit to Storm cluster
+            if (args.length !=2) {
+                System.err.println("args: runDurationSec  confFile");
+                return;
+            }
+            Integer durationSec = Integer.parseInt(args[0]);
+            Map topoConf = Utils.findAndReadConfigFile(args[1]);
+
+            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
+
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java
new file mode 100644
index 0000000..248b523
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/HdfsSpoutNullBoltTopo.java
@@ -0,0 +1,101 @@
+/*
+ * 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 org.apache.storm.perf;
+
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.hdfs.spout.HdfsSpout;
+import org.apache.storm.hdfs.spout.TextFileReader;
+import org.apache.storm.perf.bolt.DevNullBolt;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.utils.Utils;
+
+import java.util.Map;
+
+/***
+ * This topo helps measure speed of reading from Hdfs.
+ *  Spout Reads from Hdfs.
+ *  Bolt acks and discards tuples
+ */
+
+
+public class HdfsSpoutNullBoltTopo {
+    // names
+    static final String TOPOLOGY_NAME = "HdfsSpoutNullBoltTopo";
+    static final String SPOUT_ID = "hdfsSpout";
+    static final String BOLT_ID = "devNullBolt";
+
+    // configs
+    static final String SPOUT_NUM = "spout.count";
+    static final String BOLT_NUM = "bolt.count";
+
+    static final String HDFS_URI    = "hdfs.uri";
+    static final String SOURCE_DIR  = "hdfs.source.dir";
+    static final String ARCHIVE_DIR = "hdfs.archive.dir";
+    static final String BAD_DIR     = "hdfs.bad.dir";
+
+    public static final int DEFAULT_SPOUT_NUM = 1;
+    public static final int DEFAULT_BOLT_NUM = 1;
+
+
+    public static StormTopology getTopology(Map config) {
+
+        final int spoutNum = Helper.getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
+        final int boltNum = Helper.getInt(config, BOLT_NUM, DEFAULT_BOLT_NUM);
+        final String fileFormat = Helper.getStr(config, "text");
+        final String hdfsUri = Helper.getStr(config, HDFS_URI);
+        final String sourceDir = Helper.getStr(config, SOURCE_DIR);
+        final String archiveDir = Helper.getStr(config, ARCHIVE_DIR);
+        final String badDir = Helper.getStr(config, BAD_DIR);
+
+
+        // 1 -  Setup Hdfs Spout   --------
+        HdfsSpout spout = new HdfsSpout()
+                .setReaderType(fileFormat)
+                .setHdfsUri(hdfsUri)
+                .setSourceDir(sourceDir)
+                .setArchiveDir(archiveDir)
+                .setBadFilesDir(badDir)
+                .withOutputFields(TextFileReader.defaultFields);
+
+        // 2 -   DevNull Bolt   --------
+        DevNullBolt bolt = new DevNullBolt();
+
+        // 3 - Setup Topology  --------
+        TopologyBuilder builder = new TopologyBuilder();
+        builder.setSpout(SPOUT_ID, spout, spoutNum);
+        builder.setBolt(BOLT_ID, bolt, boltNum)
+                .localOrShuffleGrouping(SPOUT_ID);
+
+        return builder.createTopology();
+    }
+
+    public static void main(String[] args) throws Exception {
+        if (args.length != 2) {
+            System.err.println("args: runDurationSec topConfFile");
+            return;
+        }
+
+        Integer durationSec = Integer.parseInt(args[0]);
+        Map topoConf = Utils.findAndReadConfigFile(args[1]);
+
+        // Submit to Storm cluster
+        Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java
new file mode 100755
index 0000000..4293aac
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaHdfsTopo.java
@@ -0,0 +1,168 @@
+/*
+ * 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 org.apache.storm.perf;
+
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.hdfs.bolt.HdfsBolt;
+import org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat;
+import org.apache.storm.hdfs.bolt.format.FileNameFormat;
+import org.apache.storm.hdfs.bolt.format.RecordFormat;
+import org.apache.storm.hdfs.bolt.rotation.FileRotationPolicy;
+import org.apache.storm.hdfs.bolt.rotation.FileSizeRotationPolicy;
+import org.apache.storm.hdfs.bolt.sync.CountSyncPolicy;
+import org.apache.storm.hdfs.bolt.sync.SyncPolicy;
+import org.apache.storm.kafka.BrokerHosts;
+import org.apache.storm.kafka.KafkaSpout;
+import org.apache.storm.kafka.SpoutConfig;
+import org.apache.storm.kafka.StringMultiSchemeWithTopic;
+import org.apache.storm.kafka.ZkHosts;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.utils.Utils;
+
+import java.util.Map;
+import java.util.UUID;
+
+/***
+ * This topo helps measure speed of reading from Kafka and writing to Hdfs.
+ *  Spout Reads from Kafka.
+ *  Bolt writes to Hdfs
+ */
+
+public class KafkaHdfsTopo {
+
+  // configs - topo parallelism
+  public static final String SPOUT_NUM = "spout.count";
+  public static final String BOLT_NUM = "bolt.count";
+  // configs - kafka spout
+  public static final String KAFKA_TOPIC = "kafka.topic";
+  public static final String ZOOKEEPER_URI = "zk.uri";
+  // configs - hdfs bolt
+  public static final String HDFS_URI = "hdfs.uri";
+  public static final String HDFS_PATH = "hdfs.dir";
+  public static final String HDFS_BATCH = "hdfs.batch";
+
+
+  public static final int DEFAULT_SPOUT_NUM = 1;
+  public static final int DEFAULT_BOLT_NUM = 1;
+  public static final int DEFAULT_HDFS_BATCH = 1000;
+
+  // names
+  public static final String TOPOLOGY_NAME = "KafkaHdfsTopo";
+  public static final String SPOUT_ID = "kafkaSpout";
+  public static final String BOLT_ID = "hdfsBolt";
+
+
+
+  public static StormTopology getTopology(Map config) {
+
+    final int spoutNum = getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
+    final int boltNum = getInt(config, BOLT_NUM, DEFAULT_BOLT_NUM);
+
+    final int hdfsBatch = getInt(config, HDFS_BATCH, DEFAULT_HDFS_BATCH);
+
+    // 1 -  Setup Kafka Spout   --------
+    String zkConnString = getStr(config, ZOOKEEPER_URI);
+    String topicName = getStr(config, KAFKA_TOPIC);
+
+    BrokerHosts brokerHosts = new ZkHosts(zkConnString);
+    SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, topicName, "/" + topicName, UUID.randomUUID().toString());
+    spoutConfig.scheme = new StringMultiSchemeWithTopic();
+    spoutConfig.ignoreZkOffsets = true;
+
+    KafkaSpout spout = new KafkaSpout(spoutConfig);
+
+    // 2 -  Setup HFS Bolt   --------
+    String Hdfs_url = getStr(config, HDFS_URI);
+    RecordFormat format = new LineWriter("str");
+    SyncPolicy syncPolicy = new CountSyncPolicy(hdfsBatch);
+    FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy(1.0f, FileSizeRotationPolicy.Units.GB);
+
+    FileNameFormat fileNameFormat = new DefaultFileNameFormat().withPath(getStr(config,HDFS_PATH) );
+
+    // Instantiate the HdfsBolt
+    HdfsBolt bolt = new HdfsBolt()
+            .withFsUrl(Hdfs_url)
+            .withFileNameFormat(fileNameFormat)
+            .withRecordFormat(format)
+            .withRotationPolicy(rotationPolicy)
+            .withSyncPolicy(syncPolicy);
+
+
+    // 3 - Setup Topology  --------
+    TopologyBuilder builder = new TopologyBuilder();
+    builder.setSpout(SPOUT_ID, spout, spoutNum);
+    builder.setBolt(BOLT_ID, bolt, boltNum)
+            .localOrShuffleGrouping(SPOUT_ID);
+
+    return builder.createTopology();
+  }
+
+
+  public static int getInt(Map map, Object key, int def) {
+    return Utils.getInt(Utils.get(map, key, def));
+  }
+
+  public static String getStr(Map map, Object key) {
+    return (String) map.get(key);
+  }
+
+
+    /** Copies text file content from sourceDir to destinationDir. Moves source files into sourceDir after its done consuming */
+    public static void main(String[] args) throws Exception {
+
+        if (args.length != 2) {
+            System.err.println("args: runDurationSec topConfFile");
+            return;
+        }
+
+        Integer durationSec = Integer.parseInt(args[0]);
+        String confFile = args[1];
+        Map topoConf = Utils.findAndReadConfigFile(confFile);
+
+        //  Submit topology to Storm cluster
+        Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
+    }
+
+    public static class LineWriter implements RecordFormat {
+        private String lineDelimiter = System.lineSeparator();
+        private String fieldName;
+
+        public LineWriter(String fieldName) {
+            this.fieldName = fieldName;
+        }
+
+        /**
+         * Overrides the default record delimiter.
+         *
+         * @param delimiter
+         * @return
+         */
+        public LineWriter withLineDelimiter(String delimiter){
+            this.lineDelimiter = delimiter;
+            return this;
+        }
+
+        @Override
+        public byte[] format(Tuple tuple) {
+            return (tuple.getValueByField(fieldName).toString() +  this.lineDelimiter).getBytes();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java
new file mode 100755
index 0000000..3512c65
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/KafkaSpoutNullBoltTopo.java
@@ -0,0 +1,114 @@
+/*
+* 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 org.apache.storm.perf;
+
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.kafka.BrokerHosts;
+import org.apache.storm.kafka.KafkaSpout;
+import org.apache.storm.kafka.SpoutConfig;
+import org.apache.storm.kafka.StringMultiSchemeWithTopic;
+import org.apache.storm.kafka.ZkHosts;
+import org.apache.storm.perf.bolt.DevNullBolt;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.utils.Utils;
+
+import java.util.Map;
+import java.util.UUID;
+
+
+/***
+ * This topo helps measure speed of reading from Kafka
+ *   Spout Reads from Kafka.
+ *   Bolt acks and discards tuples
+ */
+
+public class KafkaSpoutNullBoltTopo {
+
+    // configs - topo parallelism
+    public static final String SPOUT_NUM = "spout.count";
+    public static final String BOLT_NUM = "bolt.count";
+
+    // configs - kafka spout
+    public static final String KAFKA_TOPIC = "kafka.topic";
+    public static final String ZOOKEEPER_URI = "zk.uri";
+
+
+    public static final int DEFAULT_SPOUT_NUM = 1;
+    public static final int DEFAULT_BOLT_NUM = 1;
+
+    // names
+    public static final String TOPOLOGY_NAME = "KafkaSpoutNullBoltTopo";
+    public static final String SPOUT_ID = "kafkaSpout";
+    public static final String BOLT_ID = "devNullBolt";
+
+
+    public static StormTopology getTopology(Map config) {
+
+        final int spoutNum = getInt(config, SPOUT_NUM, DEFAULT_SPOUT_NUM);
+        final int boltNum = getInt(config, BOLT_NUM, DEFAULT_BOLT_NUM);
+        // 1 -  Setup Kafka Spout   --------
+
+        String zkConnString = getStr(config, ZOOKEEPER_URI);
+        String topicName = getStr(config, KAFKA_TOPIC);
+
+        BrokerHosts brokerHosts = new ZkHosts(zkConnString);
+        SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, topicName, "/" + topicName, UUID.randomUUID().toString());
+        spoutConfig.scheme = new StringMultiSchemeWithTopic();
+        spoutConfig.ignoreZkOffsets = true;
+
+        KafkaSpout spout = new KafkaSpout(spoutConfig);
+
+        // 2 -   DevNull Bolt   --------
+        DevNullBolt bolt = new DevNullBolt();
+
+        // 3 - Setup Topology  --------
+        TopologyBuilder builder = new TopologyBuilder();
+        builder.setSpout(SPOUT_ID, spout, spoutNum);
+        builder.setBolt(BOLT_ID, bolt, boltNum)
+                .localOrShuffleGrouping(SPOUT_ID);
+
+        return builder.createTopology();
+    }
+
+
+    public static int getInt(Map map, Object key, int def) {
+        return Utils.getInt(Utils.get(map, key, def));
+    }
+
+    public static String getStr(Map map, Object key) {
+        return (String) map.get(key);
+    }
+
+
+    /**
+     * Copies text file content from sourceDir to destinationDir. Moves source files into sourceDir after its done consuming
+     */
+    public static void main(String[] args) throws Exception {
+        if (args.length !=2) {
+            System.err.println("args: runDurationSec confFile");
+            return;
+        }
+        Integer durationSec = Integer.parseInt(args[0]);
+        Map topoConf = Utils.findAndReadConfigFile(args[1]);
+
+        //  Submit to Storm cluster
+        Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java
new file mode 100755
index 0000000..5b97540
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/StrGenSpoutHdfsBoltTopo.java
@@ -0,0 +1,154 @@
+/*
+ * 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 org.apache.storm.perf;
+
+import org.apache.storm.LocalCluster;
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.hdfs.bolt.HdfsBolt;
+import org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat;
+import org.apache.storm.hdfs.bolt.format.FileNameFormat;
+import org.apache.storm.hdfs.bolt.format.RecordFormat;
+import org.apache.storm.hdfs.bolt.rotation.FileRotationPolicy;
+import org.apache.storm.hdfs.bolt.rotation.FileSizeRotationPolicy;
+import org.apache.storm.hdfs.bolt.sync.CountSyncPolicy;
+import org.apache.storm.hdfs.bolt.sync.SyncPolicy;
+import org.apache.storm.perf.spout.StringGenSpout;
+import org.apache.storm.perf.utils.Helper;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.utils.Utils;
+
+import java.util.Map;
+
+/***
+ * This topo helps measure speed of writing to Hdfs
+ *  Spout generates fixed length random strings.
+ *  Bolt writes to Hdfs
+ */
+
+public class StrGenSpoutHdfsBoltTopo {
+
+    // configs - topo parallelism
+    public static final String SPOUT_NUM = "spout.count";
+    public static final String BOLT_NUM =  "bolt.count";
+
+    // configs - hdfs bolt
+    public static final String HDFS_URI   = "hdfs.uri";
+    public static final String HDFS_PATH  = "hdfs.dir";
+    public static final String HDFS_BATCH = "hdfs.batch";
+
+    public static final int DEFAULT_SPOUT_NUM = 1;
+    public static final int DEFAULT_BOLT_NUM = 1;
+    public static final int DEFAULT_HDFS_BATCH = 1000;
+
+    // names
+    public static final String TOPOLOGY_NAME = "StrGenSpoutHdfsBoltTopo";
+    public static final String SPOUT_ID = "GenSpout";
+    public static final String BOLT_ID = "hdfsBolt";
+
+
+    public static StormTopology getTopology(Map topoConf) {
+        final int hdfsBatch = Helper.getInt(topoConf, HDFS_BATCH, DEFAULT_HDFS_BATCH);
+
+        // 1 -  Setup StringGen Spout   --------
+        StringGenSpout spout = new StringGenSpout(100).withFieldName("str");
+
+
+        // 2 -  Setup HFS Bolt   --------
+        String Hdfs_url = Helper.getStr(topoConf, HDFS_URI);
+        RecordFormat format = new LineWriter("str");
+        SyncPolicy syncPolicy = new CountSyncPolicy(hdfsBatch);
+        FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy(1.0f, FileSizeRotationPolicy.Units.GB);
+        final int spoutNum = Helper.getInt(topoConf, SPOUT_NUM, DEFAULT_SPOUT_NUM);
+        final int boltNum = Helper.getInt(topoConf, BOLT_NUM, DEFAULT_BOLT_NUM);
+
+        // Use default, Storm-generated file names
+        FileNameFormat fileNameFormat = new DefaultFileNameFormat().withPath(Helper.getStr(topoConf, HDFS_PATH) );
+
+        // Instantiate the HdfsBolt
+        HdfsBolt bolt = new HdfsBolt()
+                .withFsUrl(Hdfs_url)
+                .withFileNameFormat(fileNameFormat)
+                .withRecordFormat(format)
+                .withRotationPolicy(rotationPolicy)
+                .withSyncPolicy(syncPolicy);
+
+
+        // 3 - Setup Topology  --------
+
+        TopologyBuilder builder = new TopologyBuilder();
+        builder.setSpout(SPOUT_ID, spout, spoutNum);
+        builder.setBolt(BOLT_ID, bolt, boltNum)
+                .localOrShuffleGrouping(SPOUT_ID);
+
+        return builder.createTopology();
+    }
+
+
+    /** Spout generates random strings and HDFS bolt writes them to a text file */
+    public static void main(String[] args) throws Exception {
+        if(args.length <= 0) {
+            // submit to local cluster
+            Map topoConf = Utils.findAndReadConfigFile("conf/HdfsSpoutTopo.yaml");
+            LocalCluster cluster = Helper.runOnLocalCluster(TOPOLOGY_NAME, getTopology(topoConf));
+
+            Helper.setupShutdownHook(cluster, TOPOLOGY_NAME);
+            while (true) {//  run indefinitely till Ctrl-C
+                Thread.sleep(20_000_000);
+            }
+        } else {
+            //  Submit to Storm cluster
+            if (args.length !=2) {
+                System.err.println("args: runDurationSec confFile");
+                return;
+            }
+            Integer durationSec = Integer.parseInt(args[0]);
+            Map topoConf = Utils.findAndReadConfigFile(args[1]);
+
+            Helper.runOnClusterAndPrintMetrics(durationSec, TOPOLOGY_NAME, topoConf, getTopology(topoConf));
+        }
+    }
+
+
+    public static class LineWriter implements RecordFormat {
+        private String lineDelimiter = System.lineSeparator();
+        private String fieldName;
+
+        public LineWriter(String fieldName) {
+            this.fieldName = fieldName;
+        }
+
+        /**
+         * Overrides the default record delimiter.
+         *
+         * @param delimiter
+         * @return
+         */
+        public LineWriter withLineDelimiter(String delimiter){
+            this.lineDelimiter = delimiter;
+            return this;
+        }
+
+        public byte[] format(Tuple tuple) {
+            return (tuple.getValueByField(fieldName).toString() +  this.lineDelimiter).getBytes();
+        }
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java
new file mode 100644
index 0000000..b79a0ee
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/CountBolt.java
@@ -0,0 +1,58 @@
+/*
+ * 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 org.apache.storm.perf.bolt;
+
+
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseBasicBolt;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.tuple.Values;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CountBolt extends BaseBasicBolt {
+    public static final String FIELDS_WORD = "word";
+    public static final String FIELDS_COUNT = "count";
+
+    Map<String, Integer> counts = new HashMap<>();
+
+    @Override
+    public void prepare(Map stormConf, TopologyContext context) {
+    }
+
+    @Override
+    public void execute(Tuple tuple, BasicOutputCollector collector) {
+        String word = tuple.getString(0);
+        Integer count = counts.get(word);
+        if (count == null)
+            count = 0;
+        count++;
+        counts.put(word, count);
+        collector.emit(new Values(word, count));
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields(FIELDS_WORD, FIELDS_COUNT));
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java
new file mode 100755
index 0000000..b85ce15
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/DevNullBolt.java
@@ -0,0 +1,47 @@
+/*
+ * 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 org.apache.storm.perf.bolt;
+
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichBolt;
+import org.apache.storm.tuple.Tuple;
+
+import java.util.Map;
+
+
+public class DevNullBolt extends BaseRichBolt {
+    private OutputCollector collector;
+
+    @Override
+    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
+        this.collector = collector;
+    }
+
+    @Override
+    public void execute(Tuple tuple) {
+        collector.ack(tuple);
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java
new file mode 100644
index 0000000..116265e
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/IdBolt.java
@@ -0,0 +1,49 @@
+/*
+ * 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 org.apache.storm.perf.bolt;
+
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichBolt;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.tuple.Values;
+
+import java.util.Map;
+
+public class IdBolt extends BaseRichBolt {
+    private OutputCollector collector;
+
+    @Override
+    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
+        this.collector = collector;
+    }
+
+    @Override
+    public void execute(Tuple tuple) {
+        collector.emit(tuple, new Values( tuple.getValues() ) );
+        collector.ack(tuple);
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields("field1"));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java
new file mode 100644
index 0000000..96f9f73
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/bolt/SplitSentenceBolt.java
@@ -0,0 +1,58 @@
+/*
+ * 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 org.apache.storm.perf.bolt;
+
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseBasicBolt;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+import org.apache.storm.tuple.Values;
+
+import java.util.Map;
+
+
+public class SplitSentenceBolt extends BaseBasicBolt {
+    public static final String FIELDS = "word";
+
+    @Override
+    public void prepare(Map stormConf, TopologyContext context) {
+    }
+
+    @Override
+    public void execute(Tuple input, BasicOutputCollector collector) {
+        for (String word : splitSentence(input.getString(0))) {
+            collector.emit(new Values(word));
+        }
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields(FIELDS));
+    }
+
+
+    public static String[] splitSentence(String sentence) {
+        if (sentence != null) {
+            return sentence.split("\\s+");
+        }
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java
new file mode 100755
index 0000000..b66e4f3
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/ConstSpout.java
@@ -0,0 +1,70 @@
+/*
+ * 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 org.apache.storm.perf.spout;
+
+
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichSpout;
+import org.apache.storm.tuple.Fields;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class ConstSpout extends BaseRichSpout {
+
+    private static final String DEFAUT_FIELD_NAME = "str";
+    private String value;
+    private String fieldName = DEFAUT_FIELD_NAME;
+    private SpoutOutputCollector collector = null;
+    private int count=0;
+
+    public ConstSpout(String value) {
+        this.value = value;
+    }
+
+    public ConstSpout withOutputFields(String fieldName) {
+        this.fieldName = fieldName;
+        return this;
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields(fieldName));
+    }
+
+    @Override
+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
+        this.collector = collector;
+    }
+
+    @Override
+    public void nextTuple() {
+        List<Object> tuple = Collections.singletonList((Object) value);
+        collector.emit(tuple, count++);
+    }
+
+    @Override
+    public void ack(Object msgId) {
+        super.ack(msgId);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java
----------------------------------------------------------------------
diff --git a/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java b/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java
new file mode 100644
index 0000000..959e7c6
--- /dev/null
+++ b/examples/storm-perf/src/main/java/org/apache/storm/perf/spout/FileReadSpout.java
@@ -0,0 +1,141 @@
+/*
+ * 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 org.apache.storm.perf.spout;
+
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichSpout;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class FileReadSpout extends BaseRichSpout {
+    public static final String FIELDS = "sentence";
+    private static final long serialVersionUID = -2582705611472467172L;
+    private transient FileReader reader;
+    private String file;
+    private boolean ackEnabled = true;
+    private SpoutOutputCollector collector;
+
+    private long count = 0;
+
+
+    public FileReadSpout(String file) {
+        this.file = file;
+    }
+
+    // For testing
+    FileReadSpout(FileReader reader) {
+        this.reader = reader;
+    }
+
+    @Override
+    public void open(Map conf, TopologyContext context,
+                     SpoutOutputCollector collector) {
+        this.collector = collector;
+        Object ackObj = conf.get("topology.acker.executors");
+        if (ackObj != null && ackObj.equals(0)) {
+            this.ackEnabled = false;
+        }
+        // for tests, reader will not be null
+        if (this.reader == null) {
+            this.reader = new FileReader(this.file);
+        }
+    }
+
+    @Override
+    public void nextTuple() {
+        if (ackEnabled) {
+            collector.emit(new Values(reader.nextLine()), count);
+            count++;
+        } else {
+            collector.emit(new Values(reader.nextLine()));
+        }
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(new Fields(FIELDS));
+    }
+
+    public static List<String> readLines(InputStream input) {
+        List<String> lines = new ArrayList<>();
+        try {
+            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
+            try {
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    lines.add(line);
+                }
+            } catch (IOException e) {
+                throw new RuntimeException("Reading file failed", e);
+            } finally {
+                reader.close();
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("Error closing reader", e);
+        }
+        return lines;
+    }
+
+    public static class FileReader implements Serializable {
+
+        private static final long serialVersionUID = -7012334600647556267L;
+
+        public final String file;
+        private List<String> contents = null;
+        private int index = 0;
+        private int limit = 0;
+
+        public FileReader(String file) {
+            this.file = file;
+            if (this.file != null) {
+                try {
+                    this.contents = readLines(new FileInputStream(this.file));
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    throw new IllegalArgumentException("Cannot open file " + file, e);
+                }
+                this.limit = contents.size();
+            } else {
+                throw new IllegalArgumentException("file name cannot be null");
+            }
+        }
+
+        public String nextLine() {
+            if (index >= limit) {
+                index = 0;
+            }
+            String line = contents.get(index);
+            index++;
+            return line;
+        }
+
+    }
+}


[04/14] storm git commit: STORM-2416 Release Packaging Improvements

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java
new file mode 100644
index 0000000..2b09d6e
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttOptions.java
@@ -0,0 +1,334 @@
+/**
+ * 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 org.apache.storm.mqtt.common;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * MQTT Configuration Options
+ */
+public class MqttOptions implements Serializable {
+    private String url = "tcp://localhost:1883";
+    private List<String> topics = null;
+    private boolean cleanConnection = false;
+
+    private String willTopic;
+    private String willPayload;
+    private int willQos = 1;
+    private boolean willRetain = false;
+
+    private long reconnectDelay = 10;
+    private long reconnectDelayMax = 30*1000;
+    private double reconnectBackOffMultiplier = 2.0f;
+    private long reconnectAttemptsMax = -1;
+    private long connectAttemptsMax = -1;
+
+    private String userName = "";
+    private String password = "";
+
+    private int qos = 1;
+
+    public String getUrl() {
+        return url;
+    }
+
+    /**
+     * Sets the url for connecting to the MQTT broker.
+     *
+     * Default: `tcp://localhost:1883'
+     * @param url
+     */
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public List<String> getTopics() {
+        return topics;
+    }
+
+    /**
+     * A list of MQTT topics to subscribe to.
+     *
+     * @param topics
+     */
+    public void setTopics(List<String> topics) {
+        this.topics = topics;
+    }
+
+    public boolean isCleanConnection() {
+        return cleanConnection;
+    }
+
+    /**
+     * Set to false if you want the MQTT server to persist topic subscriptions and ack positions across client sessions.
+     * Defaults to false.
+     *
+     * @param cleanConnection
+     */
+    public void setCleanConnection(boolean cleanConnection) {
+        this.cleanConnection = cleanConnection;
+    }
+
+    public String getWillTopic() {
+        return willTopic;
+    }
+
+    /**
+     * If set the server will publish the client's Will message to the specified topics if the client has an unexpected
+     * disconnection.
+     *
+     * @param willTopic
+     */
+    public void setWillTopic(String willTopic) {
+        this.willTopic = willTopic;
+    }
+
+    public String getWillPayload() {
+        return willPayload;
+    }
+
+    /**
+     * The Will message to send. Defaults to a zero length message.
+     *
+     * @param willPayload
+     */
+    public void setWillPayload(String willPayload) {
+        this.willPayload = willPayload;
+    }
+
+    public long getReconnectDelay() {
+        return reconnectDelay;
+    }
+
+    /**
+     * How long to wait in ms before the first reconnect attempt. Defaults to 10.
+     *
+     * @param reconnectDelay
+     */
+    public void setReconnectDelay(long reconnectDelay) {
+        this.reconnectDelay = reconnectDelay;
+    }
+
+    public long getReconnectDelayMax() {
+        return reconnectDelayMax;
+    }
+
+    /**
+     * The maximum amount of time in ms to wait between reconnect attempts. Defaults to 30,000.
+     *
+     * @param reconnectDelayMax
+     */
+    public void setReconnectDelayMax(long reconnectDelayMax) {
+        this.reconnectDelayMax = reconnectDelayMax;
+    }
+
+    public double getReconnectBackOffMultiplier() {
+        return reconnectBackOffMultiplier;
+    }
+
+    /**
+     * The Exponential backoff be used between reconnect attempts. Set to 1 to disable exponential backoff. Defaults to
+     * 2.
+     *
+     * @param reconnectBackOffMultiplier
+     */
+    public void setReconnectBackOffMultiplier(double reconnectBackOffMultiplier) {
+        this.reconnectBackOffMultiplier = reconnectBackOffMultiplier;
+    }
+
+    public long getReconnectAttemptsMax() {
+        return reconnectAttemptsMax;
+    }
+
+    /**
+     * The maximum number of reconnect attempts before an error is reported back to the client after a server
+     * connection had previously been established. Set to -1 to use unlimited attempts. Defaults to -1.
+     *
+     * @param reconnectAttemptsMax
+     */
+    public void setReconnectAttemptsMax(long reconnectAttemptsMax) {
+        this.reconnectAttemptsMax = reconnectAttemptsMax;
+    }
+
+    public long getConnectAttemptsMax() {
+        return connectAttemptsMax;
+    }
+
+    /**
+     * The maximum number of reconnect attempts before an error is reported back to the client on the first attempt by
+     * the client to connect to a server. Set to -1 to use unlimited attempts. Defaults to -1.
+     *
+     * @param connectAttemptsMax
+     */
+    public void setConnectAttemptsMax(long connectAttemptsMax) {
+        this.connectAttemptsMax = connectAttemptsMax;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    /**
+     * The username for authenticated sessions.
+     *
+     * @param userName
+     */
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * The password for authenticated sessions.
+     * @param password
+     */
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public int getQos(){
+        return this.qos;
+    }
+
+    /**
+     * Sets the quality of service to use for MQTT messages. Defaults to 1 (at least once).
+     * @param qos
+     */
+    public void setQos(int qos){
+        if(qos < 0 || qos > 2){
+            throw new IllegalArgumentException("MQTT QoS must be >= 0 and <= 2");
+        }
+        this.qos = qos;
+    }
+
+    public int getWillQos(){
+        return this.willQos;
+    }
+
+    /**
+     * Sets the quality of service to use for the MQTT Will message. Defaults to 1 (at least once).
+     *
+     * @param qos
+     */
+    public void setWillQos(int qos){
+        if(qos < 0 || qos > 2){
+            throw new IllegalArgumentException("MQTT Will QoS must be >= 0 and <= 2");
+        }
+        this.willQos = qos;
+    }
+
+    public boolean getWillRetain(){
+        return this.willRetain;
+    }
+
+    /**
+     * Set to true if you want the Will message to be published with the retain option.
+     * @param retain
+     */
+    public void setWillRetain(boolean retain){
+        this.willRetain = retain;
+    }
+
+    public static class Builder {
+        private MqttOptions options = new MqttOptions();
+
+        public Builder url(String url) {
+            this.options.url = url;
+            return this;
+        }
+
+
+        public Builder topics(List<String> topics) {
+            this.options.topics = topics;
+            return this;
+        }
+
+        public Builder cleanConnection(boolean cleanConnection) {
+            this.options.cleanConnection = cleanConnection;
+            return this;
+        }
+
+        public Builder willTopic(String willTopic) {
+            this.options.willTopic = willTopic;
+            return this;
+        }
+
+        public Builder willPayload(String willPayload) {
+            this.options.willPayload = willPayload;
+            return this;
+        }
+
+        public Builder willRetain(boolean retain){
+            this.options.willRetain = retain;
+            return this;
+        }
+
+        public Builder willQos(int qos){
+            this.options.setWillQos(qos);
+            return this;
+        }
+
+        public Builder reconnectDelay(long reconnectDelay) {
+            this.options.reconnectDelay = reconnectDelay;
+            return this;
+        }
+
+        public Builder reconnectDelayMax(long reconnectDelayMax) {
+            this.options.reconnectDelayMax = reconnectDelayMax;
+            return this;
+        }
+
+        public Builder reconnectBackOffMultiplier(double reconnectBackOffMultiplier) {
+            this.options.reconnectBackOffMultiplier = reconnectBackOffMultiplier;
+            return this;
+        }
+
+        public Builder reconnectAttemptsMax(long reconnectAttemptsMax) {
+            this.options.reconnectAttemptsMax = reconnectAttemptsMax;
+            return this;
+        }
+
+        public Builder connectAttemptsMax(long connectAttemptsMax) {
+            this.options.connectAttemptsMax = connectAttemptsMax;
+            return this;
+        }
+
+        public Builder userName(String userName) {
+            this.options.userName = userName;
+            return this;
+        }
+
+        public Builder password(String password) {
+            this.options.password = password;
+            return this;
+        }
+
+        public Builder qos(int qos){
+            this.options.setQos(qos);
+            return this;
+        }
+
+        public MqttOptions build() {
+            return this.options;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java
new file mode 100644
index 0000000..9b36b78
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttPublisher.java
@@ -0,0 +1,67 @@
+/**
+ * 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 org.apache.storm.mqtt.common;
+
+
+import org.apache.storm.mqtt.MqttLogger;
+import org.apache.storm.mqtt.MqttMessage;
+import org.apache.storm.mqtt.ssl.KeyStoreLoader;
+import org.fusesource.mqtt.client.BlockingConnection;
+import org.fusesource.mqtt.client.MQTT;
+import org.fusesource.mqtt.client.QoS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URI;
+
+public class MqttPublisher {
+    private static final Logger LOG = LoggerFactory.getLogger(MqttPublisher.class);
+
+    private MqttOptions options;
+    private transient BlockingConnection connection;
+    private KeyStoreLoader keyStoreLoader;
+    private QoS qos;
+    private boolean retain = false;
+
+
+    public MqttPublisher(MqttOptions options){
+        this(options, null, false);
+    }
+
+    public MqttPublisher(MqttOptions options, boolean retain){
+        this(options, null, retain);
+    }
+
+    public MqttPublisher(MqttOptions options, KeyStoreLoader keyStoreLoader, boolean retain){
+        this.retain = retain;
+        this.options = options;
+        this.keyStoreLoader = keyStoreLoader;
+        SslUtils.checkSslConfig(this.options.getUrl(), keyStoreLoader);
+        this.qos = MqttUtils.qosFromInt(this.options.getQos());
+    }
+
+    public void publish(MqttMessage message) throws Exception {
+        this.connection.publish(message.getTopic(), message.getMessage(), this.qos, this.retain);
+    }
+
+    public void connectMqtt(String clientId) throws Exception {
+        MQTT client = MqttUtils.configureClient(this.options, clientId, this.keyStoreLoader);
+        this.connection = client.blockingConnection();
+        this.connection.connect();
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java
new file mode 100644
index 0000000..4ca0145
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/MqttUtils.java
@@ -0,0 +1,88 @@
+/**
+ * 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 org.apache.storm.mqtt.common;
+
+
+import org.apache.storm.mqtt.MqttLogger;
+import org.apache.storm.mqtt.ssl.KeyStoreLoader;
+import org.fusesource.mqtt.client.MQTT;
+import org.fusesource.mqtt.client.QoS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URI;
+
+public class MqttUtils {
+    private static final Logger LOG = LoggerFactory.getLogger(MqttUtils.class);
+
+    private MqttUtils(){}
+
+    public static QoS qosFromInt(int i){
+        QoS qos = null;
+        switch(i) {
+            case 0:
+                qos = QoS.AT_MOST_ONCE;
+                break;
+            case 1:
+                qos = QoS.AT_LEAST_ONCE;
+                break;
+            case 2:
+                qos = QoS.EXACTLY_ONCE;
+                break;
+            default:
+                throw new IllegalArgumentException(i + "is not a valid MQTT QoS.");
+        }
+        return qos;
+    }
+
+
+    public static MQTT configureClient(MqttOptions options, String clientId, KeyStoreLoader keyStoreLoader)
+            throws Exception{
+
+        MQTT client = new MQTT();
+        URI uri = URI.create(options.getUrl());
+
+        client.setHost(uri);
+        if(!uri.getScheme().toLowerCase().equals("tcp")){
+            client.setSslContext(SslUtils.sslContext(uri.getScheme(), keyStoreLoader));
+        }
+        client.setClientId(clientId);
+        LOG.info("MQTT ClientID: {}", client.getClientId().toString());
+        client.setCleanSession(options.isCleanConnection());
+
+        client.setReconnectDelay(options.getReconnectDelay());
+        client.setReconnectDelayMax(options.getReconnectDelayMax());
+        client.setReconnectBackOffMultiplier(options.getReconnectBackOffMultiplier());
+        client.setConnectAttemptsMax(options.getConnectAttemptsMax());
+        client.setReconnectAttemptsMax(options.getReconnectAttemptsMax());
+
+
+        client.setUserName(options.getUserName());
+        client.setPassword(options.getPassword());
+        client.setTracer(new MqttLogger());
+
+        if(options.getWillTopic() != null && options.getWillPayload() != null){
+            QoS qos = MqttUtils.qosFromInt(options.getWillQos());
+            client.setWillQos(qos);
+            client.setWillTopic(options.getWillTopic());
+            client.setWillMessage(options.getWillPayload());
+            client.setWillRetain(options.getWillRetain());
+        }
+        return client;
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/SslUtils.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/SslUtils.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/SslUtils.java
new file mode 100644
index 0000000..681fc1d
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/common/SslUtils.java
@@ -0,0 +1,64 @@
+/**
+ * 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 org.apache.storm.mqtt.common;
+
+
+import org.apache.storm.mqtt.ssl.KeyStoreLoader;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import java.net.URI;
+import java.security.KeyStore;
+
+public class SslUtils {
+    private SslUtils(){}
+
+    public static void checkSslConfig(String url, KeyStoreLoader loader){
+        URI uri = URI.create(url);
+        String scheme = uri.getScheme().toLowerCase();
+        if(!(scheme.equals("tcp") || scheme.startsWith("tls") || scheme.startsWith("ssl"))){
+            throw new IllegalArgumentException("Unrecognized URI scheme: " + scheme);
+        }
+        if(!scheme.equalsIgnoreCase("tcp") && loader == null){
+            throw new IllegalStateException("A TLS/SSL MQTT URL was specified, but no KeyStoreLoader configured. " +
+                    "A KeyStoreLoader implementation is required when using TLS/SSL.");
+        }
+    }
+
+    public static SSLContext sslContext(String scheme, KeyStoreLoader keyStoreLoader) throws Exception {
+        KeyStore ks = KeyStore.getInstance("JKS");
+        ks.load(keyStoreLoader.keyStoreInputStream(), keyStoreLoader.keyStorePassword().toCharArray());
+
+        KeyStore ts = KeyStore.getInstance("JKS");
+        ts.load(keyStoreLoader.trustStoreInputStream(), keyStoreLoader.trustStorePassword().toCharArray());
+
+        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+        kmf.init(ks, keyStoreLoader.keyPassword().toCharArray());
+
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+        tmf.init(ts);
+
+        SSLContext sc = SSLContext.getInstance(scheme.toUpperCase());
+        TrustManager[] trustManagers = tmf.getTrustManagers();
+        sc.init(kmf.getKeyManagers(), trustManagers, null);
+
+        return sc;
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java
new file mode 100644
index 0000000..a19fce4
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/ByteArrayMessageMapper.java
@@ -0,0 +1,34 @@
+/**
+ * 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 org.apache.storm.mqtt.mappers;
+
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.mqtt.MqttMessage;
+import org.apache.storm.mqtt.MqttMessageMapper;
+
+
+public class ByteArrayMessageMapper implements MqttMessageMapper {
+    public Values toValues(MqttMessage message) {
+        return new Values(message.getTopic(), message.getMessage());
+    }
+
+    public Fields outputFields() {
+        return new Fields("topic", "message");
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java
new file mode 100644
index 0000000..e5f309b
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/mappers/StringMessageMapper.java
@@ -0,0 +1,37 @@
+/**
+ * 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 org.apache.storm.mqtt.mappers;
+
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.mqtt.MqttMessage;
+import org.apache.storm.mqtt.MqttMessageMapper;
+
+/**
+ * Given a String topic and byte[] message, emits a tuple with fields
+ * "topic" and "message", both of which are Strings.
+ */
+public class StringMessageMapper implements MqttMessageMapper {
+    public Values toValues(MqttMessage message) {
+        return new Values(message.getTopic(), new String(message.getMessage()));
+    }
+
+    public Fields outputFields() {
+        return new Fields("topic", "message");
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java
new file mode 100644
index 0000000..08348c9
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/AckableMessage.java
@@ -0,0 +1,71 @@
+/**
+ * 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 org.apache.storm.mqtt.spout;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.storm.mqtt.MqttMessage;
+
+/**
+ * Represents an MQTT Message consisting of a topic string (e.g. "/users/ptgoetz/office/thermostat")
+ * and a byte array message/payload.
+ *
+ */
+class AckableMessage {
+    private String topic;
+    private byte[] message;
+    private Runnable ack;
+
+    AckableMessage(String topic, byte[] message, Runnable ack){
+        this.topic = topic;
+        this.message = message;
+        this.ack = ack;
+    }
+
+    public MqttMessage getMessage(){
+        return new MqttMessage(this.topic, this.message);
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder(71, 123)
+                .append(this.topic)
+                .append(this.message)
+                .toHashCode();
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) { return false; }
+        if (obj == this) { return true; }
+        if (obj.getClass() != getClass()) {
+            return false;
+        }
+        AckableMessage tm = (AckableMessage)obj;
+        return new EqualsBuilder()
+                .appendSuper(super.equals(obj))
+                .append(this.topic, tm.topic)
+                .append(this.message, tm.message)
+                .isEquals();
+    }
+
+    Runnable ack(){
+        return this.ack;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java
new file mode 100644
index 0000000..7f10cc5
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/spout/MqttSpout.java
@@ -0,0 +1,262 @@
+/**
+ * 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 org.apache.storm.mqtt.spout;
+
+import org.apache.storm.Config;
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.IRichSpout;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.mqtt.MqttMessageMapper;
+import org.apache.storm.mqtt.common.MqttOptions;
+import org.apache.storm.mqtt.common.MqttUtils;
+import org.apache.storm.mqtt.common.SslUtils;
+import org.apache.storm.mqtt.ssl.KeyStoreLoader;
+import org.fusesource.hawtbuf.Buffer;
+import org.fusesource.hawtbuf.UTF8Buffer;
+import org.fusesource.mqtt.client.Callback;
+import org.fusesource.mqtt.client.CallbackConnection;
+import org.fusesource.mqtt.client.Listener;
+import org.fusesource.mqtt.client.MQTT;
+import org.fusesource.mqtt.client.QoS;
+import org.fusesource.mqtt.client.Topic;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+
+public class MqttSpout implements IRichSpout, Listener {
+    private static final Logger LOG = LoggerFactory.getLogger(MqttSpout.class);
+
+    private String topologyName;
+
+
+    private CallbackConnection connection;
+
+    protected transient SpoutOutputCollector collector;
+    protected transient TopologyContext context;
+    protected transient LinkedBlockingQueue<AckableMessage> incoming;
+    protected transient HashMap<Long, AckableMessage> pending;
+    private transient Map conf;
+    protected MqttMessageMapper type;
+    protected MqttOptions options;
+    protected KeyStoreLoader keyStoreLoader;
+
+    private boolean mqttConnected = false;
+    private boolean mqttConnectFailed = false;
+
+
+    private Long sequence = Long.MIN_VALUE;
+
+    private Long nextId(){
+        this.sequence++;
+        if(this.sequence == Long.MAX_VALUE){
+            this.sequence = Long.MIN_VALUE;
+        }
+        return this.sequence;
+    }
+
+    protected MqttSpout(){}
+
+    public MqttSpout(MqttMessageMapper type, MqttOptions options){
+        this(type, options, null);
+    }
+
+    public MqttSpout(MqttMessageMapper type, MqttOptions options, KeyStoreLoader keyStoreLoader){
+        this.type = type;
+        this.options = options;
+        this.keyStoreLoader = keyStoreLoader;
+        SslUtils.checkSslConfig(this.options.getUrl(), this.keyStoreLoader);
+    }
+
+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
+        declarer.declare(this.type.outputFields());
+    }
+
+    public Map<String, Object> getComponentConfiguration() {
+        return null;
+    }
+
+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
+        this.topologyName = (String)conf.get(Config.TOPOLOGY_NAME);
+
+        this.collector = collector;
+        this.context = context;
+        this.conf = conf;
+
+        this.incoming = new LinkedBlockingQueue<>();
+        this.pending = new HashMap<>();
+
+        try {
+            connectMqtt();
+        } catch (Exception e) {
+            this.collector.reportError(e);
+            throw new RuntimeException("MQTT Connection failed.", e);
+        }
+
+    }
+
+    private void connectMqtt() throws Exception {
+        String clientId = this.topologyName + "-" + this.context.getThisComponentId() + "-" +
+                this.context.getThisTaskId();
+
+        MQTT client = MqttUtils.configureClient(this.options, clientId, this.keyStoreLoader);
+        this.connection = client.callbackConnection();
+        this.connection.listener(this);
+        this.connection.connect(new ConnectCallback());
+
+        while(!this.mqttConnected && !this.mqttConnectFailed){
+            LOG.info("Waiting for connection...");
+            Thread.sleep(500);
+        }
+
+        if(this.mqttConnected){
+            List<String> topicList = this.options.getTopics();
+            Topic[] topics = new Topic[topicList.size()];
+            QoS qos = MqttUtils.qosFromInt(this.options.getQos());
+            for(int i = 0;i < topicList.size();i++){
+                topics[i] = new Topic(topicList.get(i), qos);
+            }
+            connection.subscribe(topics, new SubscribeCallback());
+        }
+    }
+
+
+
+    public void close() {
+        this.connection.disconnect(new DisconnectCallback());
+    }
+
+    public void activate() {
+    }
+
+    public void deactivate() {
+    }
+
+    /**
+     * When this method is called, Storm is requesting that the Spout emit tuples to the
+     * output collector. This method should be non-blocking, so if the Spout has no tuples
+     * to emit, this method should return. nextTuple, ack, and fail are all called in a tight
+     * loop in a single thread in the spout task. When there are no tuples to emit, it is courteous
+     * to have nextTuple sleep for a short amount of time (like a single millisecond)
+     * so as not to waste too much CPU.
+     */
+    public void nextTuple() {
+        AckableMessage tm = this.incoming.poll();
+        if(tm != null){
+            Long id = nextId();
+            this.collector.emit(this.type.toValues(tm.getMessage()), id);
+            this.pending.put(id, tm);
+        } else {
+            Thread.yield();
+        }
+
+    }
+
+    /**
+     * Storm has determined that the tuple emitted by this spout with the msgId identifier
+     * has been fully processed. Typically, an implementation of this method will take that
+     * message off the queue and prevent it from being replayed.
+     *
+     * @param msgId
+     */
+    public void ack(Object msgId) {
+        AckableMessage msg = this.pending.remove(msgId);
+        this.connection.getDispatchQueue().execute(msg.ack());
+    }
+
+    /**
+     * The tuple emitted by this spout with the msgId identifier has failed to be
+     * fully processed. Typically, an implementation of this method will put that
+     * message back on the queue to be replayed at a later time.
+     *
+     * @param msgId
+     */
+    public void fail(Object msgId) {
+        try {
+            this.incoming.put(this.pending.remove(msgId));
+        } catch (InterruptedException e) {
+            LOG.warn("Interrupted while re-queueing message.", e);
+        }
+    }
+
+
+    // ################# Listener Implementation ######################
+    public void onConnected() {
+        // this gets called repeatedly for no apparent reason, don't do anything
+    }
+
+    public void onDisconnected() {
+        // this gets called repeatedly for no apparent reason, don't do anything
+    }
+
+    public void onPublish(UTF8Buffer topic, Buffer payload, Runnable ack) {
+        LOG.debug("Received message: topic={}, payload={}", topic.toString(), new String(payload.toByteArray()));
+        try {
+            this.incoming.put(new AckableMessage(topic.toString(), payload.toByteArray(), ack));
+        } catch (InterruptedException e) {
+            LOG.warn("Interrupted while queueing an MQTT message.");
+        }
+    }
+
+    public void onFailure(Throwable throwable) {
+        LOG.error("MQTT Connection Failure.", throwable);
+        MqttSpout.this.connection.disconnect(new DisconnectCallback());
+        throw new RuntimeException("MQTT Connection failure.", throwable);
+    }
+
+    // ################# Connect Callback Implementation ######################
+    private class ConnectCallback implements Callback<Void> {
+        public void onSuccess(Void v) {
+            LOG.info("MQTT Connected. Subscribing to topic...");
+            MqttSpout.this.mqttConnected = true;
+        }
+
+        public void onFailure(Throwable throwable) {
+            LOG.info("MQTT Connection failed.");
+            MqttSpout.this.mqttConnectFailed = true;
+        }
+    }
+
+    // ################# Subscribe Callback Implementation ######################
+    private class SubscribeCallback implements Callback<byte[]>{
+        public void onSuccess(byte[] qos) {
+            LOG.info("Subscripton sucessful.");
+        }
+
+        public void onFailure(Throwable throwable) {
+            LOG.error("MQTT Subscripton failed.", throwable);
+            throw new RuntimeException("MQTT Subscribe failed.", throwable);
+        }
+    }
+
+    // ################# Subscribe Callback Implementation ######################
+    private class DisconnectCallback implements Callback<Void>{
+        public void onSuccess(Void aVoid) {
+            LOG.info("MQTT Disconnect successful.");
+        }
+
+        public void onFailure(Throwable throwable) {
+            // Disconnects don't fail.
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java
new file mode 100644
index 0000000..8bca407
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/DefaultKeyStoreLoader.java
@@ -0,0 +1,97 @@
+/**
+ * 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 org.apache.storm.mqtt.ssl;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+/**
+ * KeyStoreLoader implementation that uses local files.
+ */
+public class DefaultKeyStoreLoader implements KeyStoreLoader {
+    private String ksFile = null;
+    private String tsFile = null;
+    private String keyStorePassword = "";
+    private String trustStorePassword = "";
+    private String keyPassword = "";
+
+    /**
+     * Creates a DefaultKeystoreLoader that uses the same file
+     * for both the keystore and truststore.
+     *
+     * @param keystore path to keystore file
+     */
+    public DefaultKeyStoreLoader(String keystore){
+        this.ksFile = keystore;
+    }
+
+    /**
+     * Creates a DefaultKeystoreLoader that uses separate files
+     * for the keystore and truststore.
+     *
+     * @param keystore path to keystore file
+     * @param truststore path to truststore file
+     */
+    public DefaultKeyStoreLoader(String keystore, String truststore){
+        this.ksFile = keystore;
+        this.tsFile = truststore;
+    }
+
+    public void setKeyStorePassword(String keyStorePassword) {
+        this.keyStorePassword = keyStorePassword;
+    }
+
+    public void setTrustStorePassword(String trustStorePassword) {
+        this.trustStorePassword = trustStorePassword;
+    }
+
+    public void setKeyPassword(String keyPassword) {
+        this.keyPassword = keyPassword;
+    }
+
+    @Override
+    public InputStream keyStoreInputStream() throws FileNotFoundException {
+        return new FileInputStream(this.ksFile);
+    }
+
+    @Override
+    public InputStream trustStoreInputStream() throws FileNotFoundException {
+        // if no truststore file, assume the truststore is the keystore.
+        if(this.tsFile == null){
+            return new FileInputStream(this.ksFile);
+        } else {
+            return new FileInputStream(this.tsFile);
+        }
+    }
+
+    @Override
+    public String keyStorePassword() {
+        return this.keyStorePassword;
+    }
+
+    @Override
+    public String trustStorePassword() {
+        return this.trustStorePassword;
+    }
+
+    @Override
+    public String keyPassword() {
+        return this.keyPassword;
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java
new file mode 100644
index 0000000..297efcc
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/ssl/KeyStoreLoader.java
@@ -0,0 +1,35 @@
+/**
+ * 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 org.apache.storm.mqtt.ssl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+
+/**
+ * Abstraction for loading keystore/truststore data. This allows keystores
+ * to be loaded from different sources (File system, HDFS, etc.).
+ */
+public interface KeyStoreLoader extends Serializable {
+
+    String keyStorePassword();
+    String trustStorePassword();
+    String keyPassword();
+    InputStream keyStoreInputStream() throws IOException;
+    InputStream trustStoreInputStream() throws IOException;
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java
new file mode 100644
index 0000000..e53c983
--- /dev/null
+++ b/external/storm-mqtt/src/main/java/org/apache/storm/mqtt/trident/MqttPublishFunction.java
@@ -0,0 +1,85 @@
+/**
+ * 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 org.apache.storm.mqtt.trident;
+
+import org.apache.storm.Config;
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.topology.FailedException;
+import org.apache.storm.mqtt.MqttMessage;
+import org.apache.storm.mqtt.common.MqttOptions;
+import org.apache.storm.mqtt.MqttTupleMapper;
+import org.apache.storm.mqtt.common.MqttPublisher;
+import org.apache.storm.mqtt.common.SslUtils;
+import org.apache.storm.mqtt.ssl.KeyStoreLoader;
+import org.apache.storm.trident.operation.BaseFunction;
+import org.apache.storm.trident.operation.TridentCollector;
+import org.apache.storm.trident.operation.TridentOperationContext;
+import org.apache.storm.trident.tuple.TridentTuple;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+import java.util.Map;
+
+public class MqttPublishFunction extends BaseFunction {
+    private static final Logger LOG = LoggerFactory.getLogger(MqttPublishFunction.class);
+    private MqttTupleMapper mapper;
+    private transient MqttPublisher publisher;
+    private boolean retain = false;
+    private transient OutputCollector collector;
+    private MqttOptions options;
+    private KeyStoreLoader keyStoreLoader;
+    private transient String topologyName;
+
+
+    public MqttPublishFunction(MqttOptions options, MqttTupleMapper mapper, KeyStoreLoader keyStoreLoader, boolean retain){
+        this.options = options;
+        this.mapper = mapper;
+        this.retain = retain;
+        this.keyStoreLoader = keyStoreLoader;
+        // the following code is duplicated in the constructor of MqttPublisher
+        // we reproduce it here so we fail on the client side if SSL is misconfigured, rather than when the topology
+        // is deployed to the cluster
+        SslUtils.checkSslConfig(this.options.getUrl(), keyStoreLoader);
+    }
+
+
+    @Override
+    public void prepare(Map conf, TridentOperationContext context) {
+        this.topologyName = (String)conf.get(Config.TOPOLOGY_NAME);
+        this.publisher = new MqttPublisher(this.options, this.keyStoreLoader, this.retain);
+        try {
+            this.publisher.connectMqtt(this.topologyName + "-" + context.getPartitionIndex());
+        } catch (Exception e) {
+            LOG.error("Unable to connect to MQTT Broker.", e);
+            throw new RuntimeException("Unable to connect to MQTT Broker.", e);
+        }
+    }
+
+    @Override
+    public void execute(TridentTuple tuple, TridentCollector collector) {
+        MqttMessage message = this.mapper.toMessage(tuple);
+        try {
+            this.publisher.publish(message);
+        } catch (Exception e) {
+            LOG.warn("Error publishing MQTT message. Failing tuple.", e);
+            // should we fail the batch or kill the worker?
+            throw new FailedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-mqtt/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java
----------------------------------------------------------------------
diff --git a/external/storm-mqtt/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java b/external/storm-mqtt/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java
new file mode 100644
index 0000000..0dd4d73
--- /dev/null
+++ b/external/storm-mqtt/src/test/java/org/apache/storm/mqtt/StormMqttIntegrationTest.java
@@ -0,0 +1,153 @@
+/**
+ * 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 org.apache.storm.mqtt;
+
+import org.apache.storm.Config;
+import org.apache.storm.LocalCluster;
+import org.apache.storm.LocalCluster.LocalTopology;
+import org.apache.storm.generated.StormTopology;
+import org.apache.storm.testing.IntegrationTest;
+import org.apache.storm.topology.TopologyBuilder;
+import org.apache.storm.tuple.ITuple;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.storm.mqtt.bolt.MqttBolt;
+import org.apache.storm.mqtt.common.MqttOptions;
+import org.apache.storm.mqtt.common.MqttPublisher;
+import org.apache.storm.mqtt.mappers.StringMessageMapper;
+import org.apache.storm.mqtt.spout.MqttSpout;
+import org.fusesource.mqtt.client.BlockingConnection;
+import org.fusesource.mqtt.client.MQTT;
+import org.fusesource.mqtt.client.Message;
+import org.fusesource.mqtt.client.QoS;
+import org.fusesource.mqtt.client.Topic;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Serializable;
+import java.net.URI;
+import java.util.Arrays;
+
+@Category(IntegrationTest.class)
+public class StormMqttIntegrationTest implements Serializable{
+    private static final Logger LOG = LoggerFactory.getLogger(StormMqttIntegrationTest.class);
+    private static BrokerService broker;
+    static boolean spoutActivated = false;
+
+    private static final String TEST_TOPIC = "/mqtt-topology";
+    private static final String RESULT_TOPIC = "/integration-result";
+    private static final String RESULT_PAYLOAD = "Storm MQTT Spout";
+
+    public static class TestSpout extends MqttSpout{
+        public TestSpout(MqttMessageMapper type, MqttOptions options){
+            super(type, options);
+        }
+
+        @Override
+        public void activate() {
+            super.activate();
+            LOG.info("Spout activated.");
+            spoutActivated = true;
+        }
+    }
+
+
+    @AfterClass
+    public static void cleanup() throws Exception {
+        broker.stop();
+    }
+
+    @BeforeClass
+    public static void start() throws Exception {
+        LOG.warn("Starting broker...");
+        broker = new BrokerService();
+        broker.addConnector("mqtt://localhost:1883");
+        broker.setDataDirectory("target");
+        broker.start();
+        LOG.debug("MQTT broker started");
+    }
+
+
+    @Test
+    public void testMqttTopology() throws Exception {
+        MQTT client = new MQTT();
+        client.setTracer(new MqttLogger());
+        URI uri = URI.create("tcp://localhost:1883");
+        client.setHost(uri);
+
+        client.setClientId("MQTTSubscriber");
+        client.setCleanSession(false);
+        BlockingConnection connection = client.blockingConnection();
+        connection.connect();
+        Topic[] topics = {new Topic("/integration-result", QoS.AT_LEAST_ONCE)};
+        byte[] qoses = connection.subscribe(topics);
+
+        try (LocalCluster cluster = new LocalCluster();
+             LocalTopology topo = cluster.submitTopology("test", new Config(), buildMqttTopology());) {
+
+            LOG.info("topology started");
+            while(!spoutActivated) {
+                Thread.sleep(500);
+            }
+
+            // publish a retained message to the broker
+            MqttOptions options = new MqttOptions();
+            options.setCleanConnection(false);
+            MqttPublisher publisher = new MqttPublisher(options, true);
+            publisher.connectMqtt("MqttPublisher");
+            publisher.publish(new MqttMessage(TEST_TOPIC, "test".getBytes()));
+
+            LOG.info("published message");
+
+            Message message = connection.receive();
+            LOG.info("Message recieved on topic: {}", message.getTopic());
+            LOG.info("Payload: {}", new String(message.getPayload()));
+            message.ack();
+
+            Assert.assertArrayEquals(message.getPayload(), RESULT_PAYLOAD.getBytes());
+            Assert.assertEquals(message.getTopic(), RESULT_TOPIC);
+        }
+    }
+
+    public StormTopology buildMqttTopology(){
+        TopologyBuilder builder = new TopologyBuilder();
+
+        MqttOptions options = new MqttOptions();
+        options.setTopics(Arrays.asList(TEST_TOPIC));
+        options.setCleanConnection(false);
+        TestSpout spout = new TestSpout(new StringMessageMapper(), options);
+
+        MqttBolt bolt = new MqttBolt(options, new MqttTupleMapper() {
+            @Override
+            public MqttMessage toMessage(ITuple tuple) {
+                LOG.info("Received: {}", tuple);
+                return new MqttMessage(RESULT_TOPIC, RESULT_PAYLOAD.getBytes());
+            }
+        });
+
+        builder.setSpout("mqtt-spout", spout);
+        builder.setBolt("mqtt-bolt", bolt).shuffleGrouping("mqtt-spout");
+
+        return builder.createTopology();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-opentsdb/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-opentsdb/pom.xml b/external/storm-opentsdb/pom.xml
index 0e01cdf..41f7e55 100644
--- a/external/storm-opentsdb/pom.xml
+++ b/external/storm-opentsdb/pom.xml
@@ -44,7 +44,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-pmml/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-pmml/pom.xml b/external/storm-pmml/pom.xml
index 2ddfeb3..b44c6f5 100644
--- a/external/storm-pmml/pom.xml
+++ b/external/storm-pmml/pom.xml
@@ -51,7 +51,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
 
         <!-- JPMML Compile Time dependencies              LICENSING WARNING!

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-redis/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-redis/pom.xml b/external/storm-redis/pom.xml
index 3c1ca03..102e0f5 100644
--- a/external/storm-redis/pom.xml
+++ b/external/storm-redis/pom.xml
@@ -49,7 +49,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <dependency>
             <groupId>commons-codec</groupId>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/external/storm-solr/pom.xml
----------------------------------------------------------------------
diff --git a/external/storm-solr/pom.xml b/external/storm-solr/pom.xml
index a7cc287..14922ed 100644
--- a/external/storm-solr/pom.xml
+++ b/external/storm-solr/pom.xml
@@ -42,7 +42,7 @@
             <groupId>org.apache.storm</groupId>
             <artifactId>storm-core</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
+            <scope>${provided.scope}</scope>
         </dependency>
         <!-- Solr and its dependencies -->
         <dependency>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 896d735..0fef7c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -308,6 +308,9 @@
         <qpid.version>0.32</qpid.version>
         <eventhubs.client.version>1.0.1</eventhubs.client.version>
         <jersey.version>2.24.1</jersey.version>
+
+        <!-- see intellij profile below... This fixes an annoyance with intellij -->
+        <provided.scope>provided</provided.scope>
     </properties>
 
     <modules>
@@ -361,7 +364,8 @@
         <module>examples/storm-elasticsearch-examples</module>
         <module>examples/storm-mqtt-examples</module>
         <module>examples/storm-pmml-examples</module>
-        <module>storm-perf</module>
+        <module>examples/storm-jms-examples</module>
+        <module>examples/storm-perf</module>
     </modules>
 
     <dependencies>
@@ -374,6 +378,18 @@
     </dependencies>
 
     <profiles>
+        <!--
+            Hack to make intellij behave.
+            If you use intellij, enable this profile in your IDE.
+            It should make life easier.
+        -->
+        <profile>
+            <id>intellij</id>
+            <properties>
+                <provided.scope>compile</provided.scope>
+            </properties>
+        </profile>
+
         <profile>
             <id>rat</id>
             <build>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-dist/binary/final-package/src/main/assembly/binary.xml
----------------------------------------------------------------------
diff --git a/storm-dist/binary/final-package/src/main/assembly/binary.xml b/storm-dist/binary/final-package/src/main/assembly/binary.xml
index a6aab07..9321ea2 100644
--- a/storm-dist/binary/final-package/src/main/assembly/binary.xml
+++ b/storm-dist/binary/final-package/src/main/assembly/binary.xml
@@ -42,8 +42,8 @@
             </includes>
         </fileSet>
         <!--
-            $STORM_HOME/bin
-        -->
+             $STORM_HOME/bin
+         -->
         <fileSet>
             <directory>${project.basedir}/../../../bin</directory>
             <outputDirectory>bin</outputDirectory>
@@ -56,7 +56,6 @@
         <!--
             Allow for variable substitution for cache busting in HTML files and script.js
             See storm-dist/binary/pom.xml for custom variables that will be substituted in.
-
             The source files should have a ${variable to be replaced} wherever
             maven assembly plugin should inject a value.
         -->
@@ -84,11 +83,14 @@
                 <exclude>js/script.js</exclude>
             </excludes>
         </fileSet>
+        <!-- EXAMPLES -->
         <fileSet>
             <directory>${project.basedir}/../../../examples</directory>
             <outputDirectory>examples</outputDirectory>
             <excludes>
                 <exclude>**/target/**</exclude>
+                <exclude>**/dependency-reduced-pom.xml</exclude>
+                <exclude>**/*.iml</exclude>
             </excludes>
         </fileSet>
         <fileSet>
@@ -99,13 +101,7 @@
             <outputDirectory>bin</outputDirectory>
         </fileSet>
         <!-- EXTERNAL -->
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-kafka/target</directory>
-            <outputDirectory>external/storm-kafka</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
+        <!-- only include the README file -->
         <fileSet>
             <directory>${project.basedir}/../../../external/storm-kafka</directory>
             <outputDirectory>external/storm-kafka</outputDirectory>
@@ -114,13 +110,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-kinesis/target</directory>
-            <outputDirectory>external/storm-kinesis</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-kinesis</directory>
             <outputDirectory>external/storm-kinesis</outputDirectory>
             <includes>
@@ -128,13 +117,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-hdfs/target</directory>
-            <outputDirectory>external/storm-hdfs</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-hdfs</directory>
             <outputDirectory>external/storm-hdfs</outputDirectory>
             <includes>
@@ -142,13 +124,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-hbase/target</directory>
-            <outputDirectory>external/storm-hbase</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-hbase</directory>
             <outputDirectory>external/storm-hbase</outputDirectory>
             <includes>
@@ -156,13 +131,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-jdbc/target</directory>
-            <outputDirectory>external/storm-jdbc</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-jdbc</directory>
             <outputDirectory>external/storm-jdbc</outputDirectory>
             <includes>
@@ -170,13 +138,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-hive/target</directory>
-            <outputDirectory>external/storm-hive</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-hive</directory>
             <outputDirectory>external/storm-hive</outputDirectory>
             <includes>
@@ -184,13 +145,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-eventhubs/target</directory>
-            <outputDirectory>external/storm-eventhubs</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-eventhubs</directory>
             <outputDirectory>external/storm-eventhubs</outputDirectory>
             <includes>
@@ -198,21 +152,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-eventhubs/src/main/resources</directory>
-            <outputDirectory>external/storm-eventhubs</outputDirectory>
-            <includes>
-                <include>Config.properties</include>
-            </includes>
-            <fileMode>0644</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-elasticsearch/target</directory>
-            <outputDirectory>external/storm-elasticsearch</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-elasticsearch</directory>
             <outputDirectory>external/storm-elasticsearch</outputDirectory>
             <includes>
@@ -221,41 +160,6 @@
         </fileSet>
 
         <fileSet>
-            <directory>${project.basedir}/../../../external/flux/flux-core/target</directory>
-            <outputDirectory>external/flux</outputDirectory>
-            <includes>
-                <include>flux*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/flux/flux-wrappers/target</directory>
-            <outputDirectory>external/flux</outputDirectory>
-            <includes>
-                <include>flux*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/flux/flux-examples/target</directory>
-            <outputDirectory>external/flux</outputDirectory>
-            <includes>
-                <include>flux*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/flux/flux-examples</directory>
-            <outputDirectory>external/flux/examples</outputDirectory>
-            <includes>
-                <include>README.*</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/flux/flux-examples/src/main/resources</directory>
-            <outputDirectory>external/flux/examples</outputDirectory>
-            <includes>
-                <include>*</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/flux</directory>
             <outputDirectory>external/flux</outputDirectory>
             <includes>
@@ -263,13 +167,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-redis/target</directory>
-            <outputDirectory>external/storm-redis</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-redis</directory>
             <outputDirectory>external/storm-redis</outputDirectory>
             <includes>
@@ -277,26 +174,13 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-solr/target</directory>
-            <outputDirectory>external/storm-solr</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-solr</directory>
             <outputDirectory>external/storm-solr</outputDirectory>
             <includes>
                 <include>README.*</include>
             </includes>
         </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-cassandra/target</directory>
-            <outputDirectory>external/storm-cassandra</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
+        <!-- Storm SQL -->
         <fileSet>
             <directory>${project.basedir}/../../../external/sql/storm-sql-core/target/app-assembler/repo</directory>
             <outputDirectory>external/sql/storm-sql-core</outputDirectory>
@@ -347,7 +231,7 @@
                 <include>README.*</include>
             </includes>
         </fileSet>
-
+        <!-- END Storm SQL -->
         <fileSet>
             <directory>${project.basedir}/../../../external/storm-mqtt</directory>
             <outputDirectory>external/storm-mqtt</outputDirectory>
@@ -356,27 +240,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-mqtt/core/target</directory>
-            <outputDirectory>external/storm-mqtt</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-mqtt/examples/target</directory>
-            <outputDirectory>external/storm-mqtt</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-mongodb/target</directory>
-            <outputDirectory>external/storm-mongodb</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-mongodb</directory>
             <outputDirectory>external/storm-mongodb</outputDirectory>
             <includes>
@@ -384,13 +247,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-kafka-client/target</directory>
-            <outputDirectory>external/storm-kafka-client</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-kafka-client</directory>
             <outputDirectory>external/storm-kafka-client</outputDirectory>
             <includes>
@@ -405,20 +261,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-opentsdb/target</directory>
-            <outputDirectory>external/storm-opentsdb</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-druid/target</directory>
-            <outputDirectory>external/storm-druid</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-druid</directory>
             <outputDirectory>external/storm-druid</outputDirectory>
             <includes>
@@ -440,28 +282,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../external/storm-jms/core/target</directory>
-            <outputDirectory>external/storm-jms</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-jms/examples/target</directory>
-            <outputDirectory>external/storm-jms</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-
-        <fileSet>
-            <directory>${project.basedir}/../../../external/storm-pmml/target</directory>
-            <outputDirectory>external/storm-pmml</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../external/storm-pmml</directory>
             <outputDirectory>external/storm-pmml</outputDirectory>
             <includes>
@@ -469,13 +289,6 @@
             </includes>
         </fileSet>
         <fileSet>
-            <directory>${project.basedir}/../../../examples/storm-pmml-examples/target</directory>
-            <outputDirectory>examples/storm-pmml-examples</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
             <directory>${project.basedir}/../../../examples/storm-pmml-examples/src/main/resources</directory>
             <outputDirectory>examples/storm-pmml-examples</outputDirectory>
             <includes>
@@ -509,47 +322,9 @@
                 <include>storm*jar</include>
             </includes>
         </fileSet>
-
-        <fileSet>
-            <directory>${project.basedir}/../../storm-perf/target</directory>
-            <outputDirectory>perf</outputDirectory>
-            <includes>
-                <include>storm*jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../storm-perf/src/main/conf</directory>
-            <outputDirectory>perf/conf</outputDirectory>
-            <includes>
-                <include>*yaml</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../storm-perf/src/main/sampledata</directory>
-            <outputDirectory>perf/resources</outputDirectory>
-            <includes>
-                <include>*</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>${project.basedir}/../../storm-perf/</directory>
-            <outputDirectory>perf</outputDirectory>
-            <includes>
-                <include>README.*</include>
-            </includes>
-        </fileSet>
-
     </fileSets>
 
     <files>
-        <!-- EXAMPLES -->
-        <file>
-            <source>${project.basedir}/../../../examples/storm-starter/target/storm-starter-${project.version}.jar</source>
-            <outputDirectory>/examples/storm-starter/</outputDirectory>
-            <destName>storm-starter-topologies-${project.version}.jar</destName>
-        </file>
-
-
         <!--
             $STORM_HOME/conf
         -->
@@ -565,6 +340,18 @@
             <destName>storm_env.ini</destName>
             <fileMode>0644</fileMode>
         </file>
+        <file>
+            <source>${project.basedir}/../../../conf/storm-env.sh</source>
+            <outputDirectory>/conf</outputDirectory>
+            <destName>storm-env.sh</destName>
+            <fileMode>0755</fileMode>
+        </file>
+        <file>
+            <source>${project.basedir}/../../../VERSION</source>
+            <outputDirectory>/</outputDirectory>
+            <destName>RELEASE</destName>
+            <filtered>true</filtered>
+        </file>
         <!-- TODO this should be a generated file from "target" -->
         <file>
             <source>${project.basedir}/../../../log4j2/cluster.xml</source>
@@ -601,4 +388,5 @@
             <outputDirectory>/</outputDirectory>
         </file>
     </files>
+
 </assembly>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/README.markdown
----------------------------------------------------------------------
diff --git a/storm-perf/README.markdown b/storm-perf/README.markdown
deleted file mode 100644
index 946ab21..0000000
--- a/storm-perf/README.markdown
+++ /dev/null
@@ -1,50 +0,0 @@
-# Topologies for measuring Storm performance
-
-This module includes topologies designed for measuring Storm performance.
-
-## Overview
-There are two basic modes for running these topologies
-
-- **Cluster mode:** Submits the topology to a storm cluster. This mode is useful for benchmarking. It calculates throughput and latency numbers every minute and prints them on the console.
-- **In-process mode:** Uses LocalCluster to run topology. This mode helps identify bottlenecks using profilers like JProfiler from within a IDE. This mode does not print metrics.
-
-In both the modes, a shutdown hook is setup to terminate the topology when the program that is submitting the topology is terminated.
-
-The bundled topologies can be classified into two types.
-
-- Topologies that measure purely the internal functioning of Storm. Such topologies do not interact with external systems like Kafka or Hdfs.
-- Topologies that measure speed of I/O with external systems like Kafka and Hdfs.
-
-Topologies that measure internal performance can be run in either in-proc or cluster modes.
-Topologies that measure I/O with external systems are designed to run in cluster mode only.
-
-## Topologies List
-
-1. **ConstSpoutOnlyTopo:** Helps measure how fast spout can emit. This topology has a spout and is not connected to any bolts. Supports in-proc and cluster mode.
-2. **ConstSpoutNullBoltTopo:** Helps measure how fast spout can send data to a bolt. Spout emits a stream of constant values to a DevNull bolt which discards the incoming tuples. Supports in-proc and cluster mode.
-3. **ConstSpoutIdBoltNullBoltTopo:** Helps measure speed of messaging between spouts and bolts. Spout emits a stream of constant values to an ID bolt which clones the tuple and emits it downstream to a DevNull bolt. Supports in-proc and cluster mode.
-4. **FileReadWordCount:** Measures speed of word counting. The spout loads a file into memory and emits these lines in an infinite loop. Supports in-proc and cluster mode.
-5. **HdfsSpoutNullBolt:** Measures speed at which HdfsSpout can read from HDFS. Supports cluster mode only.
-6. **StrGenSpoutHdfsBoltTopo:** Measures speed at which HdfsBolt can write to HDFS. Supports cluster mode only.
-7. **KafkaSpoutNullBolt:** Measures speed at which KafkaSpout can read from Kafka. Supports cluster mode only.
-8. **KafkaHdfsTopo:** Measures how fast Storm can read from Kafka and write to HDFS.
-
-
-## How to run ?
-
-### In-process mode:
-This mode is intended for running the topology quickly and easily from within the IDE and does not expect any command line arguments.
-Simply running the Topology's main() method without any arguments will get it running. The topology runs indefinitely till the program is terminated.
-
-
-### Cluster mode:
-When the topology is run with one or more than one cmd line arguments, the topology is submitted to the cluster.
-The first argument indicates how long the topology should be run. Often the second argument refers to a yaml config
-file which contains topology configuration settings. The conf/ directory in this module contains sample config files
-with names matching the corresponding topology.
-
-These topologies can be run using the standard storm jar command.
-
-```
-bin/storm jar  /path/storm-perf-1.1.0-jar-with-dependencies.jar org.apache.storm.perf.ConstSpoutNullBoltTopo  200  conf/ConstSpoutIdBoltNullBoltTopo.yaml
-```
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/pom.xml
----------------------------------------------------------------------
diff --git a/storm-perf/pom.xml b/storm-perf/pom.xml
deleted file mode 100644
index 8d032d2..0000000
--- a/storm-perf/pom.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <artifactId>storm</artifactId>
-        <groupId>org.apache.storm</groupId>
-        <version>2.0.0-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <groupId>org.apache.storm</groupId>
-    <artifactId>storm-perf</artifactId>
-    <packaging>jar</packaging>
-    <name>Storm Perf</name>
-    <description>Topologies and tools to measure performance.</description>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <!-- see comment below... This fixes an annoyance with intellij -->
-        <provided.scope>provided</provided.scope>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>intellij</id>
-            <properties>
-                <provided.scope>compile</provided.scope>
-            </properties>
-        </profile>
-    </profiles>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptorRefs>
-                        <descriptorRef>jar-with-dependencies</descriptorRef>
-                    </descriptorRefs>
-                    <archive>
-                        <manifest>
-                            <mainClass />
-                        </manifest>
-                    </archive>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-
-            </plugin>
-
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>exec-maven-plugin</artifactId>
-                <version>1.2.1</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>exec</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <executable>java</executable>
-                    <includeProjectDependencies>true</includeProjectDependencies>
-                    <includePluginDependencies>false</includePluginDependencies>
-                    <classpathScope>compile</classpathScope>
-                    <mainClass>${storm.topology}</mainClass>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-core</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
-            <!--
-              Use "provided" scope to keep storm out of the jar-with-dependencies
-              For IntelliJ dev, intellij will load properly.
-            -->
-            <scope>${provided.scope}</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-kafka</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.storm</groupId>
-            <artifactId>storm-hdfs</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-
-</project>

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml b/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml
deleted file mode 100644
index 9f74aee..0000000
--- a/storm-perf/src/main/conf/ConstSpoutIdBoltNullBoltTopo.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-# 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.
-
-spout.count : 1
-bolt1.count : 1  # IdBolt instances
-bolt2.count : 1  # DevNullBolt instances
-
-# storm config overrides
-topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml b/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml
deleted file mode 100644
index 51f2dd7..0000000
--- a/storm-perf/src/main/conf/ConstSpoutNullBoltTopo.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-# 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.
-
-spout.count : 1
-bolt.count : 1
-grouping : "local"  # either  "shuffle" or "local"
-
-# storm config overrides
-topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/conf/FileReadWordCountTopo.yaml
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/conf/FileReadWordCountTopo.yaml b/storm-perf/src/main/conf/FileReadWordCountTopo.yaml
deleted file mode 100644
index 61abe8f..0000000
--- a/storm-perf/src/main/conf/FileReadWordCountTopo.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-# 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.
-
-spout.count : 1
-splitter.count : 1
-counter.count : 1
-input.file : "/Users/roshan/Projects/idea/storm/storm-perf/src/main/resources/randomwords.txt"
-
-# storm config overrides
-topology.workers : 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/storm/blob/2a369e40/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml
----------------------------------------------------------------------
diff --git a/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml b/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml
deleted file mode 100644
index a06ad6e..0000000
--- a/storm-perf/src/main/conf/HdfsSpoutNullBoltTopo.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-# 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.
-
-spout.count : 1
-bolt.count : 1
-hdfs.uri : "hdfs://hdfs.namenode:8020"
-hdfs.source.dir :  "/tmp/storm/in"
-hdfs.archive.dir : "/tmp/storm/done"
-hdfs.bad.dir : "/tmp/storm/bad"
-
-# storm config overrides
-topology.workers : 1
\ No newline at end of file


[14/14] storm git commit: STORM-2416: CHANGELOG

Posted by ka...@apache.org.
STORM-2416: CHANGELOG


Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/e84b39d1
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/e84b39d1
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/e84b39d1

Branch: refs/heads/master
Commit: e84b39d1e6efa044bbe1762c7e971f9aff35eca6
Parents: 7dfd110
Author: Jungtaek Lim <ka...@gmail.com>
Authored: Thu Apr 6 07:33:41 2017 +0900
Committer: Jungtaek Lim <ka...@gmail.com>
Committed: Thu Apr 6 07:33:41 2017 +0900

----------------------------------------------------------------------
 CHANGELOG.md | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/storm/blob/e84b39d1/CHANGELOG.md
----------------------------------------------------------------------
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9f98ff2..846823d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -222,6 +222,7 @@
  * STORM-2451: windows storm.cmd does not set log4j2 config file correctly by default
 
 ## 1.1.0
+ * STORM-2416: Release Packaging Improvements
  * STORM-2407: KafkaTridentSpoutOpaque Doesn't Poll Data From All Topic-Partitions When Parallelism Hint Not a Multiple Total Topic-Partitions.
  * STORM-2414: Skip checking meta's ACL when subject has write privileges for any blobs
  * STORM-2038: Disable symlinks with a config option